指標陣列和函式指標

2021-07-30 08:17:20 字數 2035 閱讀 6367

也許讀本科就沒有搞清楚過指標,反正到現在也是糊的,決定寫個筆記搞懂。下面以牛客一道例題說明。

例:用變數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 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的優先順序高於 所以指標變數名外的括...