int main()
{
int a[3]={1,2,3};
printf("%d\n",a);
printf("%d\n",&a);
printf("%d\n",a+1);
printf("%d\n",&a+1);
printf("%d\n",&a[0]+1);
printf("%d\n",(int)a+1);
return 0;
}
分析:
由運行結果可知,數組名a和&a得內存地址相同。我們由數組和指針的關係知道,a代表這個數字,它相當於一個指針,指向第一個元素(&a[0]),即指向數組的首地址。數組中的其他元素可以通過a的位移得到,此時的進階是以數組中單個的元素類型爲單位的。所以有a+1爲2686648,即數組中a[1]的地址是2686648(在首地址2686644基礎上加int的字節數4得到的)。
然而,&a代表的不是取a這個變量的地址,而是取數組元素的地址。雖然&a和a得內存地址相同,但它們的意義不相同,它是代表整個數組的,它的進階單位是整個數組的字節長度(這裏是4*3=12),所以&a+1得內存地址爲2686656。
其實,a的類型是int[3] 數組
&a的類型是int(*)[3] 指針——指向int[3]數組的指針,所以+1相當於加上3個int型的長度
&a[0]的類型是int* 指針——指向int類型的指針,所以+1相當於加上1個int的長度
(int)a+1 將ad地址轉換成int型,+1,就是整型數+1