函式的指標

2021-06-26 17:59:48 字數 2690 閱讀 3798

函式指標是指指向函式而非指向物件的指標。像其他指標一樣,函式指標也指向某個特定的型別(特定的函式型別)。函式型別由其返回型別以及形參表確定,而與函式名無關。如下宣告了乙個函式指標:

bool (*pfunc)(int, double);    

這個語句將pfunc宣告為指向函式的指標,它所指向的函式帶有兩個型別分別為int和double的形參及乙個 bool 型別的返回值。

說明:*pfunc 兩側的圓括號是必需的,否則它就變成了函式的宣告,如:

bool

*pfunc(

int, 

double

);表示pfunc是乙個帶有兩個引數(int和double)和乙個bool指標型別返回值的函式。

總結,函式指標宣告的一搬形式:

t (*pfunc)(t args);

pfunc為函式指標,t為資料型別,引數(t args)可以有多個,也可以沒有。

【例1】:

bool isadult(int age, double weight)

return false;

}void testfuncpointer()

結果: 0

用typedef

簡化宣告

我們知道typedef

可以給型別定義乙個別名,函式指標本身就是一種型別,所以也可以給其定義乙個別名簡化基宣告。如下:

typedef

bool (*funcpointer)(int, double);

該定義表示 funcpointer是一種函式指標型別的名字。該指標型別為「指向返回 bool 型別並帶有兩個(int和double)引用形參的函式的指標」。則【例1】中的使用簡化為如下:

【例2】:

bool isadult(int age, double weight)

return false;

}typedef bool (*funcpointer)(int, double);

void testfuncpointer()

這樣,如果有多個地方使用同種型別的函式指標的話,定義指向函式的指標就會簡單很多。

用typedef定義函式指標的一般形式如下:

typedef  t(*

funcptrtype)(t

args);

funcptrtype pfunc = null;

funcptrtype為這一函式指標型別的別名,t為資料型別,引數(

targs)可以有多個,也可以沒有;pfunc為函式指標。

在【例1】和【例2】中已經提到了函式指標的使用。在給函式指標賦值時,直接引用函式名等效於在函式名上應用取位址操作符,都是把函式的位址賦給函式指標變數。

bool isadult(int age, double weight)

return false;

}bool isintbiger(int val1, double val2)

int getmax(int val1, int val2)

typedef bool (*funcpointer)(int, double);

void testfuncpointer()

結果: 0

1 1

函式指標還可以作為別乙個函式的形參。這種形參可以用以下三種形式中的任何一種編寫:

void printbiger(int, int, int (int, int)); //等價於void printbiger(int, int, int func(int, int));

void printbiger(int, int, int(*func)(int, int)); //等價於void printbiger(int, int, int(*func)(int, int));

void printbiger(int, int, funcpointermax); //還可以用簡化的形式

【例3】:

int getmax(int val1, int val2)

typedef int (*funcpointermax)(int, int);

void printbiger(int val1, int val2, int func(int, int))

void testfuncpointer()

函式指標還可以作為函式的返回值型別,其寫法比較複雜,例如:

int (*func(int))(int*, int);

要理解這個函式指標的宣告,最佳的方法是從宣告的名字開始由里而外理解。func(int) 將func宣告為乙個函式,它帶有乙個int型的形參,該函式返回乙個函式指標,函式指標的型別為:

int (*)(int*, int);

是不很難理解?那有沒有易於理解的寫法呢?答案是肯定的,我們同樣可以用typedef 進行簡化,如下:

typedef

int (*funcpointer)(int*, int);

funcpointer func(int);

  歡迎加入"

c/c++

夢之隊" 學習群:

226157456

函式指標 指標函式 函式指標的typedef

一直對c 的知識都是懵懵的,總是用著用著 開始覺的疑惑,然後就找找資料,現在就記錄一下 函式指正 和 指標函式 的區別。順便記一下 現在耳機裡的 是 river flows in you yiruma 函式指標 本質是 指標變數 其指向的是函式 宣告 函式返回值型別 指標變數名 函式引數 int f...

函式指標 函式指標陣列 函式指標的陣列的指標的概念

首先讓我們看一段 int add int x,int y int main 這是結果 這是我們add函式的位址,我們給出函式的指標變數用來存放某一函式的位址。int p int int 定義p為乙個指向函式的指標變數,它可以指向函式的型別為整型且有兩個整型引數的函式。注 如果寫成 p int,int...

函式指標 指標函式 指標的指標 指標陣列

一 函式指標 首先它是乙個指標,只是這個指標指向的是乙個函式。指標變數可以指向變數的位址 陣列 字串 動態分配位址,同時也可指向乙個函式,每個函式在編譯的時候,系統會分配給該函式乙個入口位址,函式名表示這個入口位址,那麼指向函式的指標變數稱為函式指標變數。表示 struct file operati...