#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 中的陣列可以是一維的也可以是多維的,同樣也支援矩陣和參差不齊的陣列。注意 定義多...