首先看一段程序:
輸出結果爲:
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的偏移量爲真個數組。是數組類型的指針。