C語言 陣列指標和通過指標引用陣列元素的方法總結

2021-07-11 18:09:57 字數 1866 閱讀 5947

1.陣列指標:即指向陣列的指標

那麼, 如何宣告乙個陣列指標呢?

int (* p)[10]; /*括號是必須寫的,不然就是指標陣列;10是陣列的大小*/
拓展:有指標型別元素的陣列稱為指標陣列。

2.通過指標引用陣列元素的基本方法

(1)小標法:a[i]。

(2)指標法:* (a+i) 或 * (p+i) 或 p[i]。其中,a是陣列名,p=a,即p指向陣列a首元素的位址。

問:為什麼* (a+i) 和* (p+i)是等價的,或者說是引用的同乙個陣列元素呢?

答:在c語言中,陣列名代表的是陣列中首元素的位址。在程式編譯時,a[i]是按*(a+i)處理的,即按陣列元素的首位址加上相應位移量i找到新元素的位址。而p=a,即p是指向陣列a的首元素的位址,因此是等價的。從這裡可以看出,[ ]實際上是變位址運算子,即將a[i]按a+i計算位址,然後找此位址單元中的值。

問:為什麼p[i] 和* (p+i)是等價的,或者說是引用的同乙個陣列元素呢?

答:c語言規定,當指標變數指向數字元素時,指標變數可以帶下標。而在程式編譯時,對此下標處理的方法是轉換為位址,即對p[i] 處理成 (p+i)。同上,[ ]是變址運算子。

3.利用指標引用陣列元素

(1)p++; *p;

(2)*p++;等價於*(p++);因為++和*的優先順序一樣,故結合方向是從右向左。

(3)*(p++);和*(++p);二者是有區別的。前者是先取*p的值,然後p加1;後者是先p加1,再取p的值。即如果p指向的是陣列a元素a[0],則前者得到a[0]的值,後者得到a[1]的值。

(4)++(*p);將p指向的元素的值加1。

(5)如果p指向元素a[i],

*(p--);先得到p指向的位址的元素a[i],然後p減1。

*(++p);執行結果得到a[i+1],p加1。

*(–p);執行結果得到a[i-1],p減1。

4.利用指標輸出陣列元素

int a[10];

int * p;

p = a;

while(p10)

printf("%d",*p++);

int a[10];

int * p;

p = a;

while(p10)

int a[10];

int * p;

p = a;

for(i=0;i<10;i++)

printf("%d",*p++);

int a[10];

int * p;

for(p=a;p10;p++) /*比較專業的寫法,**簡潔、高效*/

printf("%d",*p);

思考:下面**能不能正確輸出陣列元素的值呢?

int a[10];

int * p;

for(p=a;p10;a++)

printf("%d",*a);

因此,結合動態分配陣列,我們可以建立乙個一維的陣列指標:

int (* array)[n]=(int *)malloc(n*sizeof(int));

通過指標引用陣列

為了說清楚什麼是指標,必須先弄清楚資料在記憶體中是如何儲存的,又是如何讀取的。如果在程式中定義了乙個變數,在對程式進行編譯時,系統就會給這個變數分配記憶體單元。編譯系統根據程式中定義的變數型別,分配一定長度的空間。例如,visual c 為整型變數分配4個位元組,對單精度浮點型變數分配4個位元組。記...

通過指標引用陣列元素

通過指標應用陣列元素 1 下標法,如a i 形式 2 指標法,如 a i 或 p i 其中a是陣列名,p是指向陣列元素的指標變數,其初值p a 例如 有乙個整數陣列a,有10個元素,要求輸出陣列中的全部元素。1 下標法。includeint main 2 通過陣列名計算陣列元素位址,找出元素的值。i...

C語言 指標陣列和指標陣列

本質是陣列 只不過呢,它裡面存放的資料型別不是int,也不是char這類基本型別,而是乙個指標型別,說白了就是位址,所以叫指標陣列!記住 是存放指標的陣列!int p n 本質是指標 只不過是指向乙個陣列的指標,也稱之為 行指標 int p n p是乙個指標,指向乙個int型別的一位陣列,這個一位陣...