數組中,a為數組的首地址,&a[0]為數組第一個元素的地址。
所以 a == &a[0]
但是,&a又是什么東西呢?
我們來做下面的代碼測試:
#include <stdio.h> void main(void){ int a[5] = {0}; printf("a---------->%p\n", a); printf("&a--------->%p\n", &a); printf("&a[0]------>%p\n", &a[0]); printf("\nafter changed\n\n");
printf("a+1-------->%p\n", a + 1); printf("&a+1------->%p\n", &a + 1); printf("&a[0]+1---->%p\n", &a[0]+1); }
打印出的結果為:
a---------->004DF870 &a--------->004DF870 &a[0]------>004DF870 after changed a+1-------->004DF874//值增加了4,為一個int類型長度,則此地址為數組的第二個元素地址 &a+1------->004DF884//值增加了20,為五個int類型長度,則此地址為數組結束后的下一個元素地址 &a[0]+1---->004DF874//值增加了4,同a+1
雖然結果中 a == &a == &a[0] ,但是這三個值的意義不一樣
結論:
- a 表示數組元素的首地址,同時也可做為數組的指針使用
- &a 表示整個數組的首地址
- &a[0] 表示數組第一個元素的地址