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

2021-08-07 15:27:23 字數 1061 閱讀 8102

一,首先我們先分析下陣列名和陣列名取位址的區別。

我們都知道陣列名是陣列的首位址,然而對陣列名取位址又是什麼那?看下面一段程式你就會懂的。

分析:由執行結果可知,陣列名a和&a的記憶體位址相同,我們已經知道a=&a[0],所以有a+1指向陣列中下乙個元素(即為在首位址2751180基礎上加int的位元組數4)。

然而&a代表的不是取常量a的位址,而是取陣列的位址。雖然a和&a的記憶體位址相同,但是他們的意義不相同,前者僅代表陣列的首位址,後者代表整個陣列的,他的進價單位是整個陣列的位元組長度(4*5=20),所以&a+1的記憶體位址為2751200。另外當用sizeof時,由於它是個關鍵字,而不是函式,所以陣列不會自動轉換為指標,得到的結果都是陣列的長度(4*5=20)。ps:如果是(int)a+1則結果是27511801;

二,陣列指標和指標陣列的區別。

陣列指標int (*parray)[10]=&arr;首先()優先順序比較高,所以parray是乙個指標,指向乙個整形的一維陣列,陣列的長度為10,比如int arr[10]=;  

如要將二維陣列賦給一指標,應這樣賦值:

int a[3][4];

int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。

p=a;        //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]

p++;       //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]

所以陣列指標也稱指向一維陣列的指標,亦稱行指標。

指標陣列int *parray[10]  優先順序高,先與parray結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它有10個指標型別的陣列元素,

陣列名和陣列名取位址

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

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

一,首先我們先分析下陣列名和陣列名取位址的區別。我們都知道陣列名是陣列的首位址,然而對陣列名取位址又是什麼那?看下面一段程式你就會懂的。然而 a代表的不是取常量a的位址,而是取陣列的位址。雖然a和 a的記憶體位址相同,但是他們的意義不相同,前者僅代表陣列的首位址,後者代表整個陣列的,他的進價單位是整...