陣列名和陣列名取位址

2021-07-05 13:57:49 字數 936 閱讀 5030

在c中, 

在幾乎所有使用陣列的表示式中,陣列名的值是個指標常量

,也就是陣列第乙個元素的位址。 它的型別取決於陣列元素的型別: 如果它們是int型別,那麼陣列名的型別就是「指向int的常量指標「。

在以下兩種場合下,陣列名並不是用指標常量來表示,就是當陣列名作為sizeof操作符和單目操作符&的運算元時。 sizeof返回整個陣列的長度,而不是指向陣列的指標的長度。 取乙個陣列名的位址所產生的是乙個指向陣列的指標,而不是乙個指向某個指標常量的指標。

所以&a後返回的指標便是指向陣列的指標

,跟a在指標的型別上是有區別的。

請看下面的例子:

從以上輸出我們可以看出:陣列名和陣列名取位址在數值上是相同的,均表示陣列第乙個元素的位址。但是二者的顆粒度不同。

當陣列是一維陣列時,

陣列名是以乙個陣列元素為顆粒度,表現為「當陣列名加1時,這裡的1表示乙個陣列元素單元」,例子中的陣列元素為整數,所以陣列名加1時位址加4;而

陣列名取位址&以整個陣列為顆粒度,表現為「當陣列名取位址&加1時,這裡的1是表示整個陣列單元」,例子中的陣列為有5個元素的整型陣列,所以陣列名取位址&加1時,位址加20.

當陣列是二維陣列時,陣列名array、array[0]、&array[0][0]以及陣列名取位址&在數值上是相同的,同樣各個之間的顆粒度不同。其中

array[0]以及 &array[0][0] 的顆粒度相同,均是以乙個陣列元素為顆粒度,所以它們加1後,位址加4;而

陣列名和陣列名取位址&顆粒度不同,前者以一行元素為顆粒度,後者以整個陣列單元為顆粒度,所以前者加1,位址加3*4,後者加1,位址加6*4.

**:

陣列名和陣列名取位址

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...

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

include int main 執行效果 printf d n sizeof a 結果20,有點陶醉.a,既然是指向陣列結構的指標,不應該大小為20.其實,ps 如果是 int a 1,則結果是1245037 即1245036 1 揭密陣列名 陣列名的內涵在於其指代實體是一種資料結構,這種資料結構...