2016-09-15 75 views
-2

所以,我發現了一段時間以來一直困擾着我的東西。我對C語言還很陌生。C中指針的奇怪互動

,我講的代碼是在這裏,它的strcmp的實現:http://pastebin.com/VeHGm8sD

有關此計劃的奇怪的是,如果你在線路12分別爲13

*first_string++; // should increment value of char ?? 
*second_string++; 

改變

first_string++; // should increment address 
second_string++; 

但是它們都增加地址。這怎麼可能?

+1

請閱讀[運算符優先順序](http://en.cppreference.com/w/c/language/operator_precedence)。 postincrement操作符的優先級位於圖表的最上方,高於解引用操作符的頂端。 –

+2

很難理解'* first_string ++;'意圖是什麼。顯然他們想增加'first_string'。那麼爲什麼那裏有'*'呢? –

+0

這是一個很好的觀點,@DavidSchwartz。鏈接的'strcmp()'實現看起來有點兇狠 - 好像一個更簡潔的書寫版本被笨拙地重寫,試圖使它更清晰。 –

回答

2

由於運算符的優先級。

這形式是增加焦炭:

(*first_string)++; 

++*first_string; 

爲@JonathanLeffler指出。在這種特殊情況下,當由於終止語句而提前丟棄結果時,由first_string指出的字符得到增加並不重要。在所有其他情況下,當這個表達式是其他表達式的一個子表達式時,您應該清楚地瞭解您使用哪種形式的++

在您的示例*first_string++具有價值和字符的類型,而first_string++是一個指針

+0

或'++ * first_string' ... –

+0

現在看起來很明顯。菜鳥的錯誤。我認爲*有優先權。謝謝你們 – myheadhurts