C語言中陣列名與 陣列名的區別

2021-08-13 04:09:10 字數 709 閱讀 6566

#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。

C語言 陣列名與 陣列名的區別

char str 10 str 的值為str 0 的位址值,型別為char 型 str的值為陣列的首位址,型別為char 此處,兩者的值是相同的。所以在使用的時候要注意指標的型別,值相同,型別不同也是不對的 include include include include contact.h int ...

c語言 陣列名和 陣列名的區別

在學習c語言的過程中我們可以發現乙個一維陣列的的陣列名往往具有兩層含義 一.作為陣列名代表整個陣列 二.作為指標代表陣列的首元素位址 因此很容易把陣列和指標混為一談 我們可以發現陣列名等價於乙個指向陣列首位址的指標。當陣列名代表整個陣列的時候是在以下兩種情況 1.在用sizeof關鍵字求陣列所佔的記...

c語言中陣列名和陣列名取位址理解

1 陣列名是個指標型常量,也就是值不能被改變。指標常量和常量指標區別見本文 char str hello char ch 6 hello ch str 錯誤,常量不能被賦值,正如 1 2,字面值常量1被賦值為2一樣錯誤。char ch 2 定義後,陣列名相當於char const ch 0x.ch就...