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

2021-08-21 17:27:32 字數 1079 閱讀 4342

定義:int *p[n];

[ ]優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。

int a=1,b=2,c=3;

int *p[3] = ; //定義擁有3個元素的指標陣列並賦初值為 a,b,c 位址

printf("%p %p %p \n",&a,&b,&c);

printf("%p %p %p \n",*p,*(p+1),*(p+2));

printf("%d %d %d \n",**p,**(p+1),**(p+2));

程式執行結果:0061ff0c  0061ff08  0061ff04

0061ff0c  0061ff08  0061ff04

1   2   3

定義 int  (*p)[n];

( )優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的位址長度而指向下一行。

如果要將二維陣列賦給一指標,應這樣賦值:

int a[3][4];

int (*p)[4];  //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。

p=a;         //將該二維陣列的首位址賦給p,也可以是&a[0]

p++;        //該語句執行過後,也就是p=p+1;p跨過行a[0][ ]而指向了行a[1][ ]

int (*p)[4];  //定義乙個陣列指標,指向含4個元素的一維陣列

int a[3][4] = , \

, \

};p = a; //將該二維陣列的首位址賦給p,也可以是&a[0]

printf("%d \t", *(*p+1));

p++; //指向下一行

printf("%d \t", *(*p+1));

p = &a[2]; //初始化為第2行

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

程式執行結果為:2         6         10

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

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...

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

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...

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

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...