C語言中的指標陣列和陣列指標
阿新 • • 發佈:2019-01-01
可以將 *string看成陣列 a[] 下的a,即指標是指向陣列的首地址的;
指標陣列是陣列元素為指標的陣列(例如 int *p[3],定義了p[0],p[1],p[2]三個指標),其本質為陣列。
指標陣列( * stings[] )
c中指標可以作陣列使用比如:
int a[] = "hello world";
int *p;
p = a;
printf("%c", *p++);
printf("%c", p[1]); //利用陣列形式輸出
陣列不一定能作指標用比如:int a[] = "hello world";
printf("%c", *a++); //這裡不能改變陣列的地址,會報錯
這時會報錯,你不能改變陣列的地址;
但是可以這樣使用:
int a[] = "hello world";
printf("%c", *(p+1)); //沒有改變陣列地址,可行
在指標陣列中如下程式碼:
#include<stdio.h> int main(void) { char **p, i; char *strings[] ={ "one", "two", "three" }; p=strings; //strings是地址的地址,所以要定義**p for(i=0; i<3; i++) printf("%s\n", *(p++)); //這裡*(p++)是取出儲存在陣列中的每一個字串的地址 return 0; }
這裡建立了一個指標陣列strings,它的每個陣列元素相當於一個指標變數,都可以指向一個整形變數,其值為地址。也就是說strings陣列中每個元素存放的是字串的地址。
這裡可以將指標陣列看成 * (strings[1])之類,後面的那部分 strings[1] 看成指標變數 p.
陣列指標( (*strings)[] )
陣列指標,指的是陣列名的指標,即陣列首元素地址的指標。即是指向陣列的指標。例:int (*p)[10]; p即為指向陣列的指標,又稱陣列指標。
int a[4][5];
int (*p)[5]=a;
這裡所代表的 *(p+i) 是二維陣列a[i][0]的地址。