C語言中的指針加減偏移量

 

首先看一段程序:

 

輸出結果爲:

2, 5

 

第一個結果好說,a+1後指針指向了數組中的‘2’。 而第二個爲什麼輸出‘5’呢。 原理是c語言中的指針加減後,會根據指針的類型採用不同的偏移量。

 

比如, int* a;     int* b = a+1;  則 b - a = sizeof(int)

 

char* a; char* b = a+1; 則b - a = sizeof (char)  

 

 

將上述程序改寫如下,更容易認識其本質

 

 

其中只是引入了一箇中間變量 ptr指針, ptr指針的類型是 指向數組長度爲5的指針, 所以 ptr + 1  其實是加了sizeof(a)的字節量,

ptr+1後指向了從a後面,即a開始數第6個字節。

 

注意指向數組指針的寫法。括號不能丟。

 

 

 

int a[n], 則a是一個數組類型,而不是int型了,要注意正確對待。

 

 

a與&a的值一樣,但意義不一樣, a+1的偏移量爲一個int,相當於&a[0], &a+1的偏移量爲真個數組。是數組類型的指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章