陣列裡a和 a的區別

2021-07-03 17:05:46 字數 717 閱讀 2180

#include

int main(void)

;int *ptr=(int *)(&a+1);   //&a代表整個陣列的位址,+1應該加上sizeof(a)的長度,所以ptr指向a[5]位置處。

printf("%d %d\n",*(a+1),*(ptr-1));//a代表陣列首元素的位址,+1應該加上sizeof(a[0]),所以a+1指

向a[1]處。

return 0;     //輸出是  2   5 

}對指標進行加1 操作,得到的是下乙個元素的位址,而不是原有位址值直接加1。所以,乙個型別為t的指標的移動,以sizeof(t)移動單位。因此,對上題來說,a 是乙個一維陣列,陣列中有5 個元素;ptr  是乙個int  型的指標。

&a+1:取陣列a的首位址,該位址的值加上sizeof(a)的值,即&a+5*sizeof(int),也就是下乙個陣列的首位址,顯然當前指標已經越過了陣列的界限。 

(int *)(&a+1): 則是把上一步計算出來的位址,強制轉換為int * 型別,賦值給ptr 。 

*(a+1): a,&a 的值是一樣的,但意思不一樣,a 是陣列首元素的首位址,也就是a[0]的首位址,&a 是陣列的首位址,a+1 是陣列下一元素的首位址,即a[1]的首位址,&a+1 是下乙個陣列的首位址。所以輸出2。 

*(ptr-1): 因為ptr  是指向a[5],並且ptr是int * 型別,所以*(ptr-1)  是指向a[4],輸出5。

陣列裡a和 a的區別

include int main void int ptr int a 1 a代表整個陣列的位址,1應該加上sizeof a 的長度,所以ptr指向a 5 位置處。printf d d n a 1 ptr 1 a代表陣列首元素的位址,1應該加上sizeof a 0 所以a 1指 向a 1 處。ret...

陣列排列陣列裡的正數和負數排序

本篇文章是一篇關於陣列排列的帖子 每日一道理 漫漫人生路,誰都難免會遭遇各種失意或厄運。在淒風苦雨 慘霧愁雲的考驗面前,乙個強者,是不會向命運低頭的。風再冷,不會永遠不息 霧再濃,不會經久不散。風息霧散,仍是陽光燦爛。coding gb2312 將陣列裡的正數排在陣列的後面,正數排在陣列的後面。但不...

陣列裡的整數之和

二 三數之和 三 四數之和 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img cccdcxut 1601361656294 d github code eatallbugs.github.io images two sum.png 時間複雜度o n n 空間複雜度o 1 class...