int a[5]={1,2,3,4,5}; int *p=(int*)(&a+1); printf("%d",*(p-1)); 答案為什么是5?


這個問題的關鍵是理解 &a

a是一個數組名,也就是數組的首地址。
對a進行取地址運算符,得到的是一個指向數組的指針!!!!這句話尤為重要!
也就相當於
int (*p) [5] = &a;
p是一個指針,它指向的是一個包含5個int元素的數組!!

那么執行p+1后,p的偏移量相當於 p + sizeof(int) * 5 !!

而程序中強制將指針p轉換成一個int* 那么 p -1 其實就是 p - sizeof(int)
所以,p -1 指向了數組中得最后一個元素,也就是 5


免責聲明!

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



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