·詳解陣列指標與指標陣列
·陣列指標
一、區分
首先我們需要了解什麼是陣列指標以及什麼是指標陣列,如下圖:
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...