詳解C語言中的陣列指標與指標陣列

2021-09-26 05:41:14 字數 1766 閱讀 2605

·詳解陣列指標與指標陣列

·陣列指標

一、區分

首先我們需要了解什麼是陣列指標以及什麼是指標陣列,如下圖:

int *p[5];

int (*p)[5];

陣列指標的意思即為通過指標引用陣列,p先和*結合,說明了p是乙個指標變數,指向乙個大小為5的陣列。所以,int (*p)[5]即為乙個陣列指標。int *p[5]則是乙個大小為5且存放整型指標的陣列。

二、陣列元素的指標

1.定義

指標變數既然可以指向變數,同樣的,也能指向陣列元素,因此,陣列元素的指標就是陣列元素的位址。

它的寫法為:

int *p=arr;

int *p=&a[0];

這邊我們需要再次明確,陣列名並不代表整個陣列,只是代表陣列首元素的位址,因此上面兩個語句是一樣的。

2.運算

如下圖所示:

3.通過指標引用陣列元素

**如下圖:

#includeint main()

;    int *p;

for(p=a ; p

printf("\n");

return 0;

}

先讓指標p指向a陣列的首元素,列印*p(即指向陣列的值),然後執行p++,使得p指向下乙個元素,直到輸出陣列的十個元素為止。

三、通過指標引用多維陣列

1.多維陣列元素的位址

上圖都是二維陣列中位址的不同表示形式。

2.指向多維陣列的指標變數

輸出每乙個值依然可以像一維陣列一樣,但這裡我們可以介紹一種新的方法:

int main()

,,};

int (*p)[12];

int i=0;

p=&a;

printf("%d\n",(*p)[11]);

return 0;

}

就像我們前面的例子一樣,int(*p)[12]表示定義乙個指標變數,它指向乙個包含12個整型元素的一堆陣列。我們將其設定為12便可以存下整個a陣列,當然也可以存一行4個,最後如果輸出的話就方便了許多。

四、陣列指標作函式引數

下面是幾種傳參的方式:

void test()

; print(arr);

}void print(int arr[3][5])

{}void print(int arr[5])

{}void print(int **arr)

{}void print(int (*arr)[5])

{}

我們可以看出第三種方式明顯是不行的,這邊引用了乙個二級指標,但是我們上面提到過陣列的位址應該放到陣列指標中去。而第四種方法就是我們上面提到過的,而這種方式是可行的。

下面是乙個一級指標傳參的例子:

#include void print(int *p, int sz)

;    char **p;

int i;

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

return 0;

}

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

一 指標陣列和陣列指標的記憶體布局 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣列的指標 的簡稱。下...

C語言中指標陣列與陣列指標

1 指標陣列的實質是乙個陣列,這個陣列中儲存的內容全部是指標變數。2 陣列指標的實質是乙個指標,這個指標指向的是乙個陣列。1 int p 5 int p 5 int p 5 2 一般規律 int p p是乙個指標 int p 5 p是乙個陣列 3 如果核心和 結合,表示核心是指標 如果核心和 結合,...

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

1 include 2 3 int main 4 執行結果 0xbfeefda9 0xbfeefdaa 0xbfeefdab12 70xbfeefda9 0xbfeefdaa 0xbfeefdab12 7以上執行結果可以得出如下結論 char str 3 1 str i strr i 2 str i...