陣列名和陣列名取位址的區別

2021-07-06 03:13:58 字數 871 閱讀 2522

#include int main()

執行效果:

????printf("%d\n",sizeof(&a)); 結果20,有點陶醉...???

&a,既然是指向陣列結構的指標,不應該大小為20....

其實,ps:

如果是(int)a +1,則結果是1245037(即1245036+1)

揭密陣列名:

陣列名的內涵在於其指代實體是一種資料結構,這種資料結構就是陣列;

陣列名的外延在於其可以轉換為指向其指代實體的指標,而且是乙個指標常量;

指向陣列的指標則是另外一種變數型別(在win32平台下,長度為4),僅僅意味著陣列的存放位址!

出處:陣列名和指標的深入理解(c++)

這個挺帶感

說法沒有,直接上圖

&a: 是乙個指向int[5]陣列的指標  

&a+1:同樣是乙個指向陣列的指標,只是指向什麼陣列,那塊兒陣列記憶體,只是那塊陣列記憶體,不在已使用記憶體的範圍[0x200022b4---0x200022c4+4],別人依然可以申請、使用。屬於違規操作類別。

a:是乙個陣列 int[5]; 含義隨應用場景而顯著不同。

(int)a+1:強轉int,失去了應有的意義,結果,常量指標+1.

以上.....

陣列名和陣列名取位址

在c中,在幾乎所有使用陣列的表示式中,陣列名的值是個指標常量 也就是陣列第乙個元素的位址。它的型別取決於陣列元素的型別 如果它們是int型別,那麼陣列名的型別就是 指向int的常量指標 在以下兩種場合下,陣列名並不是用指標常量來表示,就是當陣列名作為sizeof操作符和單目操作符 的運算元時。siz...

陣列名和陣列名取位址

1 int a 10 2 int p a 3 int q 10 a 第二個為指向陣列的指標.a只是a 0 的位址,a 1就是a 1 的位址了,a是整個a 10 的首位址,是以整個陣列為角度來看,雖然它與a 0 的值相同,但是 a 1就已經增加了10個int型別的位元組的長度了.1 include 2...

陣列名和陣列名取位址的區別

以下 會列印出什麼樣的日誌呢?cpp view plain copy include int a 2 int main 本機 linux 結果輸出 a 0x804a014 a 0x804a014 a 1 0x804a018 a 1 0x804a01c 沒錯,上面i 和 ii列印出來的位址是一樣的,i...