震驚,超簡單的指標陣列和陣列指標的區別

2021-10-04 09:16:05 字數 2909 閱讀 8020

先舉個栗子(p)[4],p[4],(p[0]+0),(*(p+0)+0)有何區別

如果都能明白請繞道。

陣列指標,指標陣列不要傻傻的分不清楚。

下面是肝貨。。。

在**以下知識點之前,要掌握如下知識點:運算子的優先順序和結合性、一維陣列的定義和一維陣列、二維陣列的定義和二維陣列、一維陣列和指標、二維陣列和指標以及基礎的c語言知識。

在這裡推薦大家乙個c語言學習的**,功能自己了解下,很全面。

c語言網

指標講解

所謂指標變數實質就是一種儲存變數位址的變數。

char a;

//定義乙個字元型變數

char

*a:/

/定義乙個字元型指標變數

int q;

//定義乙個整型變數

int*q;

//定義乙個整形指標變數

int*

*q;//定義乙個整形的指向指標的指標變數

int k=1,

*q,*

*w;q=

&k;// &作用為取變數的位址,指標中存放的為位址

w=&q;

//w為指向指標的指標變數,顧名思義,它是用來存放指標的

int a[12]

,*p[

3],*

*pp,i;

for(i=

0;i<

12;i++

) a[i]

=i;for

(i=0

;i<

3;i++

) p[i]

=&a[i*4]

;pp=p;

指標陣列

回想一下指標講解中的內容,然後理解*p[3],它是乙個指標陣列,可把他看成容器,p[3]這個容器由3個指標變數組成p[0],*p[2],*p[3];

將a陣列分成3段,指標p[0]存放a[0]的位址, p[1]存放a[4]的位址, p[2]存放a[9]的位址;

pp為指向指標的指標變數,存放指標陣列p的位址;

可以列印一下

樣式一:(pp[?]+?)、((pp+?)+?)

pp[0][0]、(pp[0]+0)、((pp+0)+0)、

pp[0][1]、(pp[0]+1)、(*(pp+0)+1)

看起來不同實質指的是同乙個位址(*有規律的東東,把這三種表示形式記下來)

樣式二: *pp[?] *pp[0]、*pp[1]、pp[2],等價於指標陣列p[3]中3個指標變數的值,每個指標存放4個記憶體塊,行指標

樣式三:(p+?)[?] (p+1)[1]、(p+0)[2]、(p+2)[0]、**(pp+2)、pp[2][0],指向同乙個位址,兩個?的和為行指標的標號

以上是指標陣列的三種形式,指標陣列,就是由指標組成的陣列,常用於一維陣列分段;試著敲下理解,會發現還是很難理解,隔一天再試一次,我相信你會理解的。

附加程式**

void

main()

for(i=

0;i<

3;i++

) pp=p;

//printf("%d ",pp[0][0]);

//printf("%d %d\n",*pp[0],*p[0]);

//printf("%d %d\n",*pp[1],*p[1]);

//printf("%d %d\n",*pp[2],*p[2]);

printf

("%d ",*

(p+1)[

1]);

printf

("%d ",*

*(pp+2)

);printf

("%d ",*

(p+0)[

2]);

printf

("%d ",*

(p+2)[

0]);

printf

("%d "

,pp[2]

[0])

;printf

("\n");

system

("pause");

}

陣列指標

int s[3][4],(*pp)[4];

pp=s;

這裡要考慮優先順序的,「()「優先順序高,所以它是陣列指標,僅僅是佔乙個指標變數的空間,用於指向二維陣列。

與指標陣列用法相同不在舉例

附加程式**

void

main()

printf

("%d "

,pp[0]

[0])

;printf

("%d ",*

(pp[0]

+0))

;printf

("%d \n",*

(*(pp+0)

+0))

;printf

("%d "

,pp[0]

[1])

;printf

("%d ",*

(pp[0]

+1))

;printf

("%d ",*

(*(pp+0)

+1))

;/*printf("%d ",**(pp+2));

printf("%d ",*(pp+0)[2]);

printf("%d ",*(pp+1)[1]);

printf("%d ",*(pp+2)[0]);*/

system

("pause");

}

總結

寫了這麼多,它倆的區別是啥呢?

指標陣列是個容器包含多個指標變數,指向一維陣列。

陣列指標只是乙個指標變數,佔乙個指標的儲存空間,專用指向二維陣列。

指標陣列和陣列指標的簡單理解

指標陣列,重點在陣列 陣列指標,重點在指標 例子 include using namespace std int main int a 4 指標陣列 int b 4 陣列指標 b c 將陣列c中元素賦給陣列a for int i 0 i 4 i 輸出看下結果 cout include using n...

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...