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]指針變量取地址,所以猜測結果是不一樣的。

但是,看輸出結果。

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

答案是一樣,這個是為什么呢?

a

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

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

 

 

 

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

a+1 指針移動sizeof(int)四個字節
&a+1 指針移動sizeof(a)二十個個字節

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM