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