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

2022-06-28 23:00:18 字數 626 閱讀 5108

#include

int main()

執行結果:

分析:由執行結果可知,陣列名a和&a的記憶體位址相同。我們由陣列和指標的關係知道,a代表這個數字,它相當於乙個指標,指向第乙個元素(&a[0]),即指向陣列的首位址。陣列中的其他元素可以通過a的位移得到,此時的高階是以陣列中單個的元素型別為單位的。所以有a+1為1245040,即陣列中a[1]的位址是1245040(在首位址1245036基礎上加int的位元組數4得到的)。

然而,&a代表的不是取a這個變數的位址,而是取陣列元素的位址。雖然&a和a的記憶體位址相同,但它們的意義不相同,它是代表整個陣列的,它的高階單位是整個陣列的位元組長度(這裡是4*5=20),所以&a+1得記憶體位址為1245056。

其實,a的型別是int[5]   陣列

&a的型別是int(*)[5]  指標——指向int[5]陣列的指標

&a[0]的型別是int*    指標——指向int型別的指標

而&a為指標(指向整個陣列),所以sizeof(&a)為4

ps:如果是(int)a +1,則結果是1245037(即1245036+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...