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.