指標陣列與陣列指標 從一維到二維

2021-10-05 07:02:02 字數 2336 閱讀 5229

這是乙個很容易混淆的概念

int

*p1[5];

int(

*p2)[5

];

第乙個就是乙個指標陣列

[ ]的優先順序比*高,所以p1會先於[ ]結合,成為陣列,再和指標結合,成為陣列指標,也就是陣列中每乙個元素都是乙個指標

指標陣列是陣列,即-乙個陣列中,每個元素都是指標。

第二個就是乙個陣列指標

()的優先順序比[ ]高,所以*p先構成乙個指標,再和[ ]構成乙個陣列

所以p2是乙個指標,指向的是包含5個int 資料的陣列

陣列指標是指標,即乙個指向陣列的指標

下面舉乙個例子

int arr[5]

=;int(

*p1)[5

]=&arr;

/*下面是錯誤的*

/int

(*p2)[5

]= arr;

我們都知道,陣列名arr是陣列首元素的位址,而&arr是整個陣列的首位址

但是在c語言裡面,上面的是正確的,下面的確是錯誤的

在 c 語言中,賦值符號「=」號兩邊的資料型別必須是相同的,如果不同,則需要顯示或隱式型別轉換。

在這裡面,p1和p2都是陣列指標,指向的是整個陣列

而&arr是整個陣列的首位址,也是指向的整個陣列

但是,arr卻是陣列首元素的位址,指向的是單個元素,資料型別不一樣,就會發生錯誤

下面我們來到二維陣列

我們定義了乙個二維陣列

#include

using namespace std;

int main(),

};cout<<

"a的值是:"

<

cout<<

"*a的值是:"

<<

*a<

cout<<

"*a[0]的值是:"

<

<

cout<<

"*a[0][0]的值是:"

<<

&a[0][

0]<

cout<<

"a[0][0]的值是:"

<

[0]<

return0;

}

下面是他的執行結果

我們可以看到 a ,*a ,*a[0] ,*a[0][0],這四個值是一樣的,那麼是不是就代表他們四個也相同呢?

當然不,他們的型別不同

a 是整個陣列的首位址,a[0] 是陣列第一行的首位址,雖然值相同,但是含義不同,也就是型別不同

a 是相對於整個陣列來說,a[0] 是相對於第一行來說

也就是,a是int *[3]型別

這裡就需要再次說明一下為什麼是int *[3]型別

p是乙個指標變數,它指向包含3個int元素的一維陣列,此時p的增量以它所指向的一維陣列長度為單位;

(p+i)是一維陣列a[i][0]的位址;

(p+2)+3表示a[2][3]位址(第一行為0行,第一列為0列),((p+2)+3)表示a[2][3]的值。

a[0]是int *型別

如果將a[0] 改為&a[0] , 那麼a和&a[0] 是相同的

下面我們再看乙個例子,這道題的正確答案是c a

定義了乙個二維陣列

看一下報錯資訊

提示型別轉換錯誤

pa應該定義為 (*pa)[5] ,[ ]裡面的數字應該是二維陣列每一行元素的個數 b

定義了乙個指標陣列

後半句也是錯誤的

左邊是乙個陣列,而右邊只是乙個元素的指標,型別不同

c是正確的

定義了乙個指標陣列,c陣列的每乙個元素已經是指標了,再取陣列名就又加了乙個指標,左邊也是指標的指標,型別相同

比如一維陣列

int s[2]=;

那麼s就是1的指標

也就是說,只取陣列名,就相當於加了乙個指標,如果陣列中的元素本來就是指標,那不就是指標的指標了麼

d

右邊是二級指標,左邊只是一級指標,所以錯誤

就是說如果你將乙個n級指標賦給指標變數,定義這個指標變數就得用n個*表示

一維陣列,二維陣列與指標

陣列與指標間的三條規則 陣列名是指向陣列首元素的指標。e相當於給e公升了一階。int a 4 a 0 本身是乙個值,a 0 是乙個位址,公升階大概就是這個意思 e相當於給e降了一階。降階相當於把乙個指標降為值,a 0 是乙個位址,a 0 就成為了值 以上內容來自北京大學 c程式設計高階 一維陣列與指...

指標與一維 二維陣列

示例程式 includevoid main int i,j 用陣列名做指標輸出資料 第一種方式 printf s n m 第二種方式 for i 0 m i 0 i printf c m i 注意點1 printf n 通過定義指標型變數輸出 char p m 將陣列首位址賦給指標變數p 第一種方式...

二維陣列 指標陣列與陣列指標

一 首先我們從字面意思理解一下什麼是指標陣列什麼是陣列指標 1 指標陣列 本質是乙個陣列,陣列中的每乙個元素是乙個指標。2 陣列指標 本質是乙個指標,而指標指向乙個陣列。二 我們該怎麼區分指標陣列和陣列指標?1 總共有三種表示形式 int p 4 和int p 4 和int p 4 表面看起來是不是...