先舉個栗子(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...