C語言奇妙之旅 指標陣列

2021-08-22 04:57:00 字數 1831 閱讀 4264

乙個陣列的元素值為指標則是指標陣列。 指標陣列是一組有序的指標的集合。

一般形式

資料型別 * 陣列名[陣列長度]

例如

/*

* 程式功能: 指標陣列

* 程式版本: v0.1.00

q是乙個指標陣列, 三個元素分別指向二維陣列a的各行。 然後用for迴圈輸出制定的陣列元素。 

指標陣列可以作為函式的參量使用,使用方式與普通陣列類似。

指標陣列常適用於指向若干字串,這樣使字串處理更加靈活方便。

#include int main(void)

; int (*p)[2] = (int (*)[2])a;

/*等號左邊:宣告並定義指標p為陣列指標,指向的陣列長度為2;

轉換為和p一樣的型別;

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

輸出結果是:3 (p+1指向的的2元素陣列為p指向2元素陣列的下 乙個陣列,*(p+1)是p+1指向的陣列的首位址內存放的內容)

**/return 0;

} /*

*/

#include int main(void)

; int (*p)[2] = (int (*)[2])&a; //a是陣列首位址。 &a是指向陣列的指標

printf("%d\n", **p); //輸出結果是:1

printf("%d\n", *(*p+1)); //輸出結果是:2

printf("%d\n", **(p+1)); //輸出結果是:3

printf("%d\n", *a); //輸出結果是:1

printf("%d\n", *(a+1)); //輸出結果是:2

printf("%d\n", *(a+9)); //輸出結果是:10

printf("%p\n", *(a+10)); //輸出結果是:0012ff14

printf("%d\n", *(&a)); //輸出結果是:1244948

printf("%d\n", *(&a+1)); //輸出結果是:1244988,&a+1是下乙個10元素的int型別陣列, *(&a+1)是下乙個10元素int陣列的位址,可以看到它比*(&a)大了40個位元組=int的4個位元組*10個int

printf("%p\n", *(&a+1)); //輸出結果是:0012ff3c 是 1244988的16進製表示

return 0; }/*

*/

以上兩個程式是看了別人的部落格"偷"來的, ↓面是鏈結, 有點懶了                  熬夜成癮(,,•﹏•,,)

陣列指標是指向陣列位址的指標,其本質為指標;

指標陣列是陣列元素為指標的陣列(例如 int *p[3],定義了p[0],p[1],p[2]三個指標),其本質為陣列。

陣列指標的使用在某些情況下與指標陣列很相似,要注意區別。

C語言奇妙之旅 指標函式

指標函式是指帶指標的函式,即本質是乙個函式,函式返回型別是某一型別的指標。例子 程式功能 指標函式 程式版本 v0.1.00 include int f int i,int j 定義了乙個指標函式 函式指標是指向函式的指標變數,即本質是乙個指標變數。例子 include void function ...

C語言奇妙之旅 結構體陣列

定義乙個結構體陣列的方式與定義結構體變數的方法相同,只是把結構體變數替換成陣列。定義結構體陣列的一般形式 struct 結構體名 成員列表 陣列名 struct student char a int a 3 student 5 直接定義結構體陣列 struct char a int a 3 stud...

C語言奇妙之旅 for巢狀if

例子 求 1 10 能被2整數的數 程式功能 列印 0 到 10 程式版本 v2.33 include int main printf 我 d能被2整除 i if和for預設能控制一條語句,不過為了 規範盡量加上大括號,這也看得出我 不夠規範,d要對應乙個變數在字串後面,也就是格式字元都要在字串後面...