今天遇到指標函式和函式指標的問題,就直接把它徹底地分析了一遍,總結如下:
指標函式與函式指標表示方法的不同,千萬不要混淆。最簡單的辨別方式就是看函式名前面的指標*號有沒有被括號()包含,如果被包含就是函式指標,反之則是指標函式。
主要的區別是乙個是指標變數,乙個是函式。在使用是必要要搞清楚才能正確使用。
1、
指標函式
:帶指標的函式,即本質是乙個函式。函式返回型別是某一型別的指標
。型別識別符號 *函式名(參數列) int *f(x,y);
首先它是乙個函式,只不過這個函式的返回值是乙個位址值。指標函式一定有函式返回值,而且在主調函式中,函式返回值必須賦給同型別的指標變數。
例如:
float *fun();
float *p;
p = fun( );
當乙個函式宣告其返回值為乙個指標時,實際上就是返回乙個位址給呼叫函式,以用於需要指標或位址的表示式中。
由於返回的是乙個位址,所以型別說明符一般都是int。
int *f(int a, int b);
上面的函式宣告又可以寫成如下形式:
int* f(int a, int b);
讓指標標誌 * 與int緊貼在一起,而與函式名f間隔開,這樣看起來就明了些了,f是函式名,返回值型別是乙個int型別的指標。
例如:
int *f(int a, int b); // 宣告指標函式
int main(int argc, char* argv)
/*指標函式的定義,返回值是指標型別int */
int *f(int a, int b)
通過執行結果,可以看出,指標函式f返回的型別是乙個指標型別,因為f是賦值給int型別指標p1的,如果不是指標型別,編譯就會出錯。
從上圖的執行結果可以看出,指標函式f的返回值p和f賦值給的指標p1的位址是相同的,都是指向指標函式內部申請的記憶體位址0x3b88d0。
所以,指標函式就是返回乙個位址給呼叫者,用於需要位址的情況。
2、
函式指標:指向
函式(首位址)
的指標變數,即本質是乙個指標變數。
函式指標說的就是乙個指標,但這個指標指向的函式,不是普通的基本資料型別或者類物件。
指向函式的指標包含了函式的位址,可以通過它來呼叫函式。
宣告格式:型別說明符
(*函式名
)(引數
)其實這裡不能稱為函式名,應該叫做指標的變數名。這個特殊的指標指向乙個返回整型值的函式。指標的宣告必須和它指向函式的宣告保持一致。
指標名和指標運算子外面的括號改變了預設的運算子優先順序。如果沒有圓括號,就變成了乙個返回整型指標的函式的原型宣告。
int (*f)(int a, int b); // 宣告函式指標
當然,函式指標的返回值也可以是指標。
上面的函式指標定義為乙個指向乙個返回值為整型,有兩個引數並且兩個引數的型別都是整型的函式。
下面是利用函式指標分別求兩個整數的最大值和最小值的用法。
/* 求最大值,返回值是int型別,返回兩個整數中較大的乙個*/
int max(int a, int b)
/* 求最小值,返回值是int型別,返回兩個整數中較小的乙個*/
int min(int a, int b)
int(*f)(int, int); // 宣告函式指標,指向返回值型別為int,有兩個引數型別都是int的函式
例如:void (*fptr)();把函式的位址賦值給函式指標,可以採用下面兩種形式:
fptr=&function;
fptr=function;
取位址運算子&不是必需的,因為單單乙個函式識別符號就標號表示了它的位址,如果是函式呼叫,還必須包含乙個圓括號括起來的參數列。
可以採用如下兩種方式來通過指標呼叫函式:
x=(*fptr)();
x=fptr();
第二種格式看上去和函式呼叫無異。但是有些程式設計師傾向於使用第一種格式,因為它明確指出是通過指標而非函式名來呼叫函式的。下面舉乙個例子:
void (*funcp)();
void filefunc(), editfunc();
int main()
void filefunc()
void editfunc()
程式輸出為:filefunc editfunc建議看看:指標陣列和陣列指標的區別 指標函式,函式指標,指標的指標 詳解
1 指標函式是指帶指標的函式,即本質是乙個函式。函式返回型別是某一型別的指標 型別識別符號 函式名 參數列 int f x y 首先它是乙個函式,只不過這個函式的返回值是乙個位址值。函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函式返回值必須賦給同型...
函式指標例項
1.定義 每乙個函式都占用一段記憶體單元,它們有乙個起始位址,指向函式入口位址的指標稱為函式指標。2.語法 指向函式的指標變數的一般定義形式為 資料型別 指標變數名 參數列 3.說明 1 函式指標的定義形式中的資料型別是指函式的返回值的型別。2 區分下面兩個語句 int p int a,int b ...
函式指標 函式指標陣列和指標函式
1.函式指標 這個指標返回乙個函式 int f int x 宣告乙個函式指標 f func 將func函式的首位址賦給指標f 2.函式指標陣列 這個指標返回一組函式 include stdio.h void function0 void void function1 void void functi...