2015-04-03 80 views
0

在閱讀關於指針我發現了一個指針變量用於指示這樣的數組:理解指針變量遞增

char* chrArray; 
int* intArray; 

該後,我發現在代碼中使用charArray++intArray++以指示charArray下一個元素和intArray。但到目前爲止,我知道C中的char是1個字節,而數組中的int是4個字節。所以我不明白增量操作符在這裏的表現如何。任何人都可以請解釋它。

+0

請參閱[指針算術](http://stackoverflow.com/questions/394767/pointer-arithmetic) – 2015-04-03 08:11:29

+1

沒有哪種語言比C(彙編...)更能控制內存。有了這個偉大的控制權,我們有責任知道在任何給定位置存儲在內存中的內容以及如何處理該值。指針只是變量,而不是像正常值那樣保持你的想法,指針將內存地址保存到值的存儲位置。當你像上面那樣聲明指針時,它們只會爲你指定一個地址。正常的例子是'int n = 5; int * p =&n;'這裏'p'保存存儲值'5'的地址'n'。 – 2015-04-03 08:28:09

回答

4

這是由知道指針類型的編譯器處理的,因此可以通過相關大小遞增其存儲的地址,無論它是char,int還是任何其他類型。

+0

這意味着字符增量操作符設置指針指示內存中的下一個字節?併爲整數它設置4個字節後? – sharif1981 2015-04-03 08:12:36

+0

一般是的。但是,理解指針的++運算符語義是通過指定項目的大小來增加地址是很重要的。這是在編譯程序期間由編譯器處理的。 – 2015-04-03 08:14:41

+0

非常感謝。現在它是有道理的。 – sharif1981 2015-04-03 08:15:45

3

作爲每C11標準文檔,章6.5.2.5,後綴增量和減量運算

後綴的結果++運算符是操作數的值。作爲副作用,操作數對象的值將增加(即,向其添加適當類型的值012)。

所以,當你使用後綴遞增運算符,你不加入任何特定值,而是你addding 值1的操作數的類型上,操作者是用過的。


現在對於你的榜樣,

  • chrArraychar *類型。因此,如果我們做chrArray++,那麼char [sizeof(char),即1]的值將作爲結果添加到chrArray

  • OTOH,intArray的類型是int *。因此,如果我們執行intArray++,那麼int [sizeof(int),即4在32位平臺上的值可能有所不同]的值將作爲結果添加到intArray

基本上,在任何類型的指向下一個元素的指針變量一個後綴增量操作符(提供的,有效的訪問),該類型的。