1. 程式人生 > >C語言中的指標陣列和陣列指標

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

可以將 *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]的地址。