數組首地址&a偏移一個單位

po上代碼先:

#include <stdio.h>

void main()
{
    int a[5] = {1,2,3,4,5};
    int *ptr = (int *)(&a + 1);
    printf("%d,%d",*(a+1),*(ptr-1));
}

這裏&a + 1是我在編程中所出現的疑點。
一開始我的認爲是&a跟a均表示數組首元素的地址。如當*(a+1)輸出2時,便是很好的理解,a代表1,那麼加上一個int的偏移便指向了2,解釋符輸出2.
然而&a是對象(數組)首地址,其類型爲int(*)[5],指向的是數組這一整塊內存,那麼這裏的指針加上的是一個同樣大小數組的偏移,即指向了數組a末尾的下一指針a[5]。所以這裏的ptr-1通過解釋符輸出了5.

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