陣列a 中 a和a的區別

2021-08-03 21:58:08 字數 846 閱讀 5056

#includeint main()

; int *ptr = (int *)(&a + 1);

printf("%d,%d", *(a + 1), *(ptr - 1));

return 0;

}//輸出:2,5

前提

:a和&a的值是一樣的,但是意義有所區別,a指的是a[0]的位址,&a指的是陣列a的位址(「陣列名」代表陣列第乙個元素的位址,「&陣列名」代表的是整個陣列的位址)。從而導致a+1和&a+1有了本質的差異。

a+1 = a[0]的位址+sizeof(int);(在第乙個元素的位址上便宜乙個陣列元素的大小,即下乙個元素,a[1]的位址。)

&a+1 = 陣列a的位址+sizeof(a);(在陣列的位址上偏移乙個陣列的大小,此時sizeof(a)中的a是乙個陣列,不是乙個指標,計算出來是乙個陣列的大小,不是指標的大小)

*(a+1):先計算a+1,a指的是a[0]的位址,a+1是a[0]的位址+size(int),就是a[1]的位址;

因此*(a+1)就是a[1]的值,a[1] = 2。

*(ptr-1):先計算ptr-1,ptr=&a+1,其中&a+1=&a+sizeof(a)(陣列位址+整個陣列大小);

ptr-1=&a+sizeof(a)-sizeof(int),即陣列最後乙個元素的位址,&a[4];*(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...

C 中的陣列和C 中陣列的區別

c 中陣列是引用型別,c 定義整型陣列方式是 int intarray 或int intarray new int 10 而c 中定義整型陣列的方式是 int intarray 或int intarray new int 10 c 中的陣列可以是一維的也可以是多維的,同樣也支援矩陣和參差不齊的陣列。...

C 中的陣列和C 中陣列的區別

c 中陣列是引用型別,c 定義整型陣列方式是 int intarray 或int intarray new int 而c 中定義整型陣列的方式是 int intarray 或int intarray new int c 中的陣列可以是一維的也可以是多維的,同樣也支援矩陣和參差不齊的陣列。注意 定義多...