陣列中a和 a的區別

2021-06-22 14:07:22 字數 717 閱讀 9644

#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和a的區別

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的位址 陣列名 代表陣列第乙個元素的位址,陣列名 代表的是整個陣列的位址 從而...

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