陣列和指標的比較

2021-08-05 18:52:55 字數 1724 閱讀 5044

陣列和指標的比較

(2)指標變數有基型別,相當於陣列的型別名。

(3)指標變數的位址值不可改變,即指標變數指向的儲存單元的位址值是固定的,不可改變,如int *p,a;p=&a;則變數a的位址是不可改變的。也不可給陣列名的位址重新賦值。如陣列名為a的陣列:a=&x;或a++等給陣列名重新賦值都是錯誤的。一旦定義,a永遠指向a陣列的首位址。

a  代表 &a陣列的首位址,也是a[0]的位址   //首位址

a+1 代表 &a陣列元素a[1]的位址   //在指標中,1代表乙個儲存單元

a+2 代表 &a......   //注意:不是a=a+1,而是 a+1

例:main()

int a[10],*p,x,k;

for(k=0;k<10;k++) p=a+k;  //a是陣列的首位址,p=a+k;則遍歷了陣列中每個元素

for (k=0;k<10;k++)  scanf("%d",a+k);    //輸入每個元素的值

for (k=0;k<10;k++)  printf("%d\n",a[k]);    //列印每個元素的值

getch();

p=&a[0]; 等價於 p=a;

以下語句等價:

for(p=a,k=0;k<10;k++)  p++;//將陣列a的首位址賦給指標p,k從0到9,p++將遍歷陣列中每個元素的位址。依次指向陣列 a1,a2,a3......a9.

for(p=a,k=0;k<10;k++)

for(p=a,k=0;k<10;k++)scanf("%d",p++);//什麼 自加自減運算子,當++在後面時,當前表示式的值不變,元素加1.

for(p=a;p-a<10;p++)scanf(「%d」,p);

通過陣列首位址 指標 帶下標的指標引用一維陣列元素。

引用一維陣列中的某乙個元素的方法:

1  a【i】

2  *&a【i】  //*在定義語句時代表定義乙個指標變數,當在執行語句部分時代表間址運算子,引用乙個指標變數指向的位址的內容。&叫求位址運算子,求當前內容的位址。所以*和&就像乘號和除號一樣,互相抵消了。

4  當(p=a;||p=&a)則 *(p+i)等價於a[i]

5  當(p=a;||p=&a[0])  則 p[i] 等價於 a[i]    //方括號不僅表示陣列元素的記號,也是一種運算子.

總結:引用一維陣列元素a[i] 的四種方法: a[i] *(a+i)  若p=a, 則 p[i] *(p+i)

以下代表什麼:

*(p--)   a[i--]  *--p   a[--i]

注:自加自減運算,p-- 等價於:m=p--  m=p   p=p-1 //先賦值,(先取值)再改變

--p 等價於:m=--p  p=p-1 m=p  //先改變,再賦值。(再取值)

陣列名a和指向陣列的指標p的區別.前者不可變,不可運算,後者可以賦值,運算.

a++  是個賦值表示式

3)逐個輸出a陣列中元素的值.

for(k=0;k<10;k++)  printf("%4d",*(a+k));

for(k=0;k<10;k++)  printf("%4d",a[k]);

for(p=a,k=0;k<10;k++)  printf("%4d",*(p+k));

for(p=a,k=0;k<10;k++)  printf("%4d",p[k]);

for(p=a,k=0;k<10;k++)  //p++,即依次指向每乙個元素。

C 指標陣列與陣列指標的比較

test1.cpp 定義控制台應用程式的入口點。最簡單的辨別方式就是看函式名前面的指標號 有沒有被括號 包含,如果被包含就是函式指標,反之則是指標函式。include stdafx.h include iostream using namespace std void main int p 5 陣列...

指標與陣列的比較

c c 程式中,指標和陣列在不少地方可以相互替換著用,讓人產生一種錯覺,以 為兩者是等價的。陣列要麼在靜態儲存區被建立 如全域性陣列 要麼在棧上被建立。陣列名對應著 而不是指向 一塊記憶體,其位址與容量在生命期內保持不變,只有陣列的內容可以改變。指標可以隨時指向任意型別的記憶體塊,它的特徵是 可變 ...

比較指標與陣列的特性

侵權即刪 c c 程式中,指標和陣列在不少地方可以相互替換著用,讓人產生一種錯覺,以為兩者是等價的。陣列要麼在靜態儲存區被建立 如全域性陣列 要麼在棧上被建立。陣列名對應著 而不是指向 一塊記憶體,其位址與容量在生命期內保持不變,只有陣列的內容可以改變。指標可以隨時指向任意型別的記憶體塊,它的特徵是...