原文:
函式指標是指指向函式而非指向物件的指標。像其他指標一樣,函式指標也指向某個特定的型別(特定的函式型別)。函式型別由其返回型別以及形參表確定,而與函式名無關。如下宣告了乙個函式指標:
bool (*pfunc)(int, double);
這個語句將pfunc宣告為指向函式的指標,它所指向的函式帶有兩個型別分別為int和double的形參及乙個 bool 型別的返回值。
說明:*pfunc 兩側的圓括號是必需的,否則它就變成了函式的宣告,如:bool *pfunc(int, double);表示pfunc是乙個帶有兩個引數(int和double)和乙個bool指標型別返回值的函式。
案例1:
bool isadult(int age, double weight)
return false;}
void testfuncpointer()
我們知道typedef可以給型別定義乙個別名,函式指標本身就是一種型別,所以也可以給其定義乙個別名簡化基宣告。如下:
typedef bool (*funcpointer)(int, double);
該定義表示 funcpointer是一種函式指標型別的名字。該指標型別為「指向返回 bool 型別並帶有兩個(int和double)引用形參的函式的指標」。則【例1】中的使用簡化為如下:
bool isadult(int age, double weight)
return false;}
typedef bool (*funcpointer)(int, double);
void testfuncpointer()
函式指標還可以作為別乙個函式的形參。這種形參可以用以下三種形式中的任何一種編寫:
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); //還可以用簡化的形式
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程式設計學習 梳理16 拷貝建構函式詳解
原文 目錄 一.什麼是拷貝建構函式 二.拷貝建構函式的呼叫時機 1.物件以值傳遞的方式傳入函式引數 2.物件以值傳遞的方式從函式返回 3.物件需要通過另外乙個物件進行初始化 三.淺拷貝和深拷貝 1.預設拷貝建構函式 2.淺拷貝 3.深拷貝 4.防止預設拷貝發生 include using names...
C C程式設計學習 梳理19 類的多繼承
原創 在c 中乙個類可以從多個基類中派生 即可以有多個父類 這就是多繼承。多繼承的方式主要有兩種 類c會同時擁有類a和類b的特性 屬性和方法,也就是兩個類的所有成員 這種方式很簡單這裡就不多說,主要講下面這種方式。同樣的,這個結構中類c也會同時擁有類a和類b的特性,但這就會有乙個問題,類b1和b2都...
C C 的函式指標
病人 醫生,我折騰了許久,無法理解函式指標。中醫 能意識到自己不理解,不錯。那麼你說說你目前的理解。函式指標是什麼?病人 函式指標是指向函式的指標。中醫 那麼函式是什麼?病人 函式就是函式。中醫 不是指向函式的指標?病人 自然不是。中醫 那函式怎麼可以賦值給函式指標?難道int可以賦值給int 病人...