函式指標和指標函式用法和區別

2021-09-11 16:48:26 字數 2175 閱讀 2389

**

指標函式,簡單的來說,就是乙個返回指標的函式,其本質是乙個函式,而該函式的返回值是乙個指標。

宣告格式為:*型別識別符號 函式名(參數列)

這似乎並不難理解,再進一步描述一下。

看看下面這個函式宣告:

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);

效果一樣。寫法看個人習慣,其實如果*靠近返回值型別的話,可能更容易理解其定義。

(由於本人習慣於 qt 中進行開發,所以這裡為了方便,示例是在 qt 工程中寫的,其語法是一樣的,只是輸出方式不同)

來看乙個非常簡單的示例:

typedef struct _datadata;

//指標函式

data* f(int a,int b)

int main(int argc, char *ar**)

輸出如下:

f(4,5) =  4 5

注意:在呼叫指標函式時,需要乙個同型別的指標

來接收其函式的返回值。

不過也可以將其返回值定義為 void*型別,在呼叫的時候 強制轉換返回值為自己想要的型別,如下://指標函式

void* f(int a,int b)

呼叫:data * mydata = static_cast(f(4,5));

其輸出結果是一樣的,不過不建議這麼使用,因為強制轉換可能會帶來風險。

函式指標,其本質是乙個指標變數,該指標指向這個函式。總結來說,函式指標就是指向函式的指標。

宣告格式:型別說明符 (*函式名) (引數)

如下:

int (*fun)(int x,int y);
fun = &function;

fun = function;

取位址運算子&不是必需的,因為乙個函式識別符號 就表示了它的位址,如果是函式呼叫,還必須包含乙個圓括號括起來的參數列。

呼叫函式指標的方式也有兩種:

x = (*fun)();

x = fun();

兩種方式均可,其中第二種看上去和普通的函式呼叫沒啥區別。如果可以的話,建議使用第一種,因為可以清楚的指明這是通過指標的方式來呼叫函式。當然,也要看個人習慣,如果理解其定義,隨便怎麼用都行啦。

int add(int x,int y)

int sub(int x,int y)

//函式指標

int (*fun)(int x,int y);

int main(int argc, char *ar**)

輸出如下:

(*fun)(1,2) =  3

(*fun)(5,2) =  2 2

上面說到的幾種賦值和呼叫方式我都分別使用了,其輸出結果是一樣的。

指標函式本質是乙個函式,其返回值為指標。

函式指標本質是乙個指標,其指向乙個函式。

指標函式:int* fun(int x,int y);

函式指標:int (*fun)(int x,int y);

可以簡單粗暴的理解為,指標函式的是屬於資料型別的,而函式指標的星號是屬於函式名的。

再簡單一點,可以這樣辨別兩者:函式名帶括號的就是函式指標,否則就是指標函式。

上面已經寫了詳細示例,這裡就不在囉嗦了。

函式指標和指標函式用法和區別

前言 函式指標和指標函式,在學習 c 語言的時候遇到這兩個東西簡直頭疼,當然還有更頭疼的,比如什麼函式指標函式 指標函式指標 陣列指標 指標陣列 函式指標陣列等等,描述越長其定義就越複雜,當然理解起來就越難,特別是剛開始學習這門語言的童鞋,估計碰到這些東西就已經要崩潰了,然後好不容易死記硬背下來應付...

函式指標和指標函式用法和區別

前言 函式指標和指標函式,在學習 c 語言的時候遇到這兩個東西簡直頭疼,當然還有更頭疼的,比如什麼函式指標函式 指標函式指標 陣列指標 指標陣列 函式指標陣列等等,描述越長其定義就越複雜,當然理解起來就越難,特別是剛開始學習這門語言的童鞋,估計碰到這些東西就已經要崩潰了,然後好不容易死記硬背下來應付...

C 指標函式和函式指標的用法和區別

定義 指標函式,簡單的來說,就是乙個返回指標的函式,其本質是乙個函式,而該函式的返回值是乙個指標。宣告格式為 型別識別符號 函式名 參數列 int fun int x,int y 乙個普通函式,然後返回值是乙個 int 型別,是乙個數值。int fun int x,int y 在函式名前面多了乙個 ...