C語言對數組取地址

#include <stdio.h>
main()
{
int a[5] = {1,2,3,4,5};
printf("a=%p\n" , a);
printf("a=%p\n" , &a);
printf("a=%p\n" , &a+1);
int *ptr = (int*)(&a+1);
printf("%d %d\n" , *(a+1), *(ptr-1));
}

你們先看如上代碼。而後猜想打印出a的內存地址和&a的內存地址是否同樣?直覺上&a應該是對a這個指向a[0]指針變量取地址,因此猜想結果是不同的。數組

可是,看輸出結果。spa

a=0x7fff8178af30
&a=0x7fff8178af30
&a+1=0x7fff8178af44
2 5

答案是同樣,這個是爲何呢?指針

a

指向a數組a[0]元素的指針code

&a 指向整個a數組的指針

 

 

 

其實指向整個a數組的指針固然也是指向整個數組的起始地址也是a[0]。因此a和&a的內存地址指針也是同樣的。雖然他們的內存指針地址是相同的。可是對這兩個指針進行加減表示的含義是不一樣的。blog

a+1 指針移動sizeof(int)四個字節
&a+1 指針移動sizeof(a)二十個個字節
相關文章
相關標籤/搜索