對比理解指標函式和函式指標

2021-06-01 09:35:19 字數 1293 閱讀 3542

1、函式指標,可以這樣理解,它首先是乙個指標變數(一般佔4個位元組),只是它將要指向的資料型別為某種形式的函式。

舉例如清單1: 

#include int int_func(int a, int b)

char char_func(char a, char b)

int main(void)

例子輸出結果: 

int_func: 9

char_func: c

例子中的第15、16行分別定義了兩個函式指標int_func_ptr和char_func_ptr,它們分別能指向的資料型別為int (int, int)和char (char, char),因此函式int_func的資料型別與int_func_ptr相匹配,函式char_func的資料型別與char_func_ptr相匹配。

在通過函式指標呼叫函式時,既可以使用間接運算子(*)顯式地呼叫,如例子中的(*char_func_ptr)(『1』,『2』),也可以使用簡寫形式,如例子中的int_func_ptr(4, 5),須要注意的是這種寫法只是(*int_func_prt)(4, 5)的簡寫形式罷了。

因此,呼叫首位址為0的子例程的語句,在c語言中可以這樣寫:(* ( void(*)(void) ) 0)(void),首先把0位址強制型別轉變為void(*)(void)這樣形式的函式指標,然後通過類似(*pfunc)(void)的形式來呼叫。

函式名代表了本函式的入口位址。在給函式指標賦值時,既可以使用取位址運算子(&)顯式地取函式的首位址,如例子中的int (*int_func_ptr)(int, int) = &int_func,也可以直接把函式名賦給函式指標,如例子中的char(*char_func_ptr)(char, cahr) = char_func。

2、指標函式,它是乙個函式,只是其返回值是乙個某種資料型別的指標。

舉例如清單2: 

#include #include #include char *getmemory(int num)

int main(void)

例子輸出結果: 

hello world
例子中的getmemory就是乙個指標函式,它返回malloc函式分配的一段記憶體的首位址。這裡須要注意的是getmemory返回值的資料型別和p的資料型別是一致的,都是char *。

思考題:嘗試分析下面宣告的含義? 

char *(*ar[10])(int, int **p);

對比理解指標函式和函式指標

1 函式指標,可以這樣理解,它首先是乙個指標變數 一般佔4個位元組 只是它將要指向的資料型別為某種形式的函式。舉例如清單1 cpp view plain copy include int int func int a,int b char char func char a,char b int ma...

指標函式與函式指標理解

1 指標作為函式引數 跟傳址函式一樣的用法,形參的改變對應的實參有效。2 指標函式 指標最為函式的返回值。語法格式 資料型別 函式名 參數列 1 資料型別是函式返回的指標所指向資料的型別 2 函式名宣告了乙個指標型的函式 3 參數列是函式的形參列表 例如 int fun int a,int b 3 ...

函式指標 函式指標陣列和指標函式

1.函式指標 這個指標返回乙個函式 int f int x 宣告乙個函式指標 f func 將func函式的首位址賦給指標f 2.函式指標陣列 這個指標返回一組函式 include stdio.h void function0 void void function1 void void functi...