簡單的來說,就是乙個返回型別是指標的函式,其本質是乙個函式,而該函式的返回值是乙個指標。乙個函式可以返回乙個整型值、字元值、實型值等,也可以返回指標型的資料,即位址;
宣告格式為:*型別識別符號 函式名(參數列)
int fun(int x,int y); 這種函式返回值是乙個 int 型別,是乙個數值。
int *fun(int x,int y); 這個函式就是乙個指標函式。其返回值是乙個 int 型別的指標,是乙個位址。
int *fun(int x,int y);
int * fun(int x,int y);
int* fun(int x,int y);
示例:
typedef struct datadata;
//指標函式
data* fun(int a,int b)
int main()
輸出如下:
f(4,5) = 4 , 5
注意:在呼叫指標函式時,需要乙個同型別的指標來接收其函式的返回值。不過也可以將其返回值定義為 void*型別,在呼叫的時候強制轉換返回值為自己想要的型別,void指標是一種很特別的指標,並不指定它是指向哪一種型別的資料,而是根據需要轉換為所需資料型別。如下:
//指標函式
void* fun(int a,int b)
呼叫:data * mydata = (data * )(f(4,5));
其輸出結果是一樣的,不過不建議這麼使用,因為強制轉換可能會帶來風險。
其本質是乙個指標變數,該指標指向這個函式。總結來說,函式指標就是指向函式的指標。
宣告格式:型別說明符 (*函式名) (引數)
int (*fun)(int x,int y);
函式指標是需要把乙個函式的位址賦值給它,有兩種寫法:
fun = &function;
fun = function;
兩種方式均可,其中第二種看上去和普通的函式呼叫沒啥區別,如果可以的話,建議使用第一種,因為可以清楚的指明這是通過指標的方式來呼叫函式。示例
int add(int x,int y)
int sub(int x,int y)
//函式指標
int (*fun)(int x,int y);
int main()
輸出如下:
(*fun)(1,2) = 3
(*fun)(5,2) = 3
###定義不同
指標函式本質是乙個函式,其返回值為指標。
函式指標本質是乙個指標,其指向乙個函式。
寫法不同
指標函式:int* fun(int x,int y);
函式指標:int (*fun)(int x,int y);
可以簡單粗暴的理解為,指標函式的*是屬於資料型別的,而函式指標的*是屬於函式名的。
C語言 指標函式和函式指標
指標函式和函式指標 指標函式其實是乙個簡稱,是指帶指標的函式,它本質上是乙個函式,只是返回的是某種型別的指標。其定義的格式為 型別識別符號 函式名 參數列 函式指標,從本質上說是乙個指標,只是它指向的不是一般的變數,而是乙個函式。因為每個函式都有乙個入口位址,函式指標指向的就是函式的入口位址。其定義...
C語言 指標函式和函式指標
1 指標函式是指帶指標的函式,本質上是乙個函式,函式返回值是某一型別的指標 定義 型別識別符號 函式名 參數列 int f int x,int y 它首先是乙個函式,只不過這個函式的返回值是乙個位址值,函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函...
C語言指標函式和函式指標區別
c和c 中經常會用到指標,和資料項一樣,函式也是有位址的,函式的位址是儲存其機器語言 的記憶體的開始位址。指標函式和函式指標經常會混淆,乙個是返回指標的函式,另乙個是指向函式的指標,下面就分別解釋指標函式和函式指標的區別。指標函式是返回指標的函式主體是函式,返回值是乙個指標 基本宣告形式 返回資料型...