也許讀本科就沒有搞清楚過指標,反正到現在也是糊的,決定寫個筆記搞懂。下面以牛客一道例題說明。
例:用變數a給出下面的定義:乙個有10個指標的陣列,該指標指向乙個函式,該函式有乙個整形引數並返回乙個整型數()
a.int *a[10];
b.int (*a)[10];
c.int (*a)(int);
d.int (*a[10])(int);
答案:d
原因如下:
int *a[10]; //指向int型別的指標陣列a[10]
int (*a)[10]; //指向有10個int型別陣列的指標a
int (*a)(int);//函式指標,指向有乙個引數並且返回型別 均為int的函式
int (*a[10])(int); //函式指標的陣列,指向有乙個引數並且返回型別均為int的函式的陣列
1. 定義乙個陣列
a[10]
2. 該陣列元素是指標
*a[10]
3. 該指標指向乙個函式,
(* a[10]) ()
4. 有乙個整形引數
(* a[10]) (int)
5. 並返回乙個整形數
int (* a[10]) (int)
例2:定義乙個函式指標,指向的函式有兩個int形參並且返回乙個函式指標,返回的指標指向乙個有乙個int形參且返回int的函式?
1. 定義乙個函式指標
(*p)
2. 指向的函式有兩個int引數
(*p) (int,int)
3. 返回值是乙個函式指標
* (*p) (int,int) (* (*p) (int,int))
4. 返回的指標指向乙個int引數
(* (*p) (int,int))(int)
5. 並返回 int
int (* (*p) (int,int))(int)
所以:int (* (*p) (int,int))(int)
相似的乙個例子:宣告乙個指向含有10個元素的陣列的指標,其中每個元素是乙個函式指標,該函式的返回值是int,引數是int*,正確的是()
1. 宣告乙個指標
(*p)
2. 該指標指向乙個陣列
(*p)[10]
3. 每個元素是乙個函式指標
(*(*p)[10])()
4. 引數是int*
(*(*p)[10])(int*)
5. 返回值是int
int (*(*p)[10])(int*)
經典例子
注意: 指向陣列的指標和指標陣列
int *a[10]: a是乙個陣列,該陣列的元素是指標,每個指標都指向乙個int型
int (*a)[10]:a是乙個指標,該指標指向乙個陣列,陣列元素是int
例子1
int (*a[10])(int)1. a是乙個陣列
2. a這個陣列的元素是乙個指標
3. 指標是乙個函式指標
4. 這個函式引數是int,返回值是int
a是乙個包含10個元素的陣列,每個元素指向乙個引數是int,返回值是int的函式。
例子2
int (*(*p)[10])(int*)1. p是乙個指標
2. p這個指標指向乙個陣列
3. 陣列元素是指標
4. 陣列元素的指標指向乙個函式
5. 這個函式引數是int*,返回值是int
p是乙個指向包含10個元素的陣列的指標,每個元素是乙個函式指標,指向乙個引數是int*,返回值是int的函式。
陣列指標和指標陣列 函式指標和指標函式
一 陣列指標與指標陣列 1,指標陣列 所謂指標陣列,就是指標組成的陣列,即陣列的元素為指標 int pa size size為元素數目,元素的值為int型別的指標 2,陣列指標 所謂陣列指標,就是指向陣列的指標,即其是乙個指標,指向陣列。int pa size size為陣列的元素數目,pa指向乙個...
函式指標和指標函式 陣列指標和指標陣列
函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...
指標函式和函式指標 指標陣列和陣列指標
綜述 函式指標是乙個指向函式的指標,而指標函式是指乙個返回值為指標的函式 陣列指標是乙個指向二維陣列的指標變數,而指標陣列是多個指標變數以陣列的形式儲存在記憶體中 一 函式指標 1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的優先順序高於 所以指標變數名外的括...