1、函式指標,可以這樣理解,它首先是乙個指標變數(一般佔4個位元組),只是它將要指向的資料型別為某種形式的函式。
舉例如清單1:
[cpp]view plain
copy
#include
int int_func(int a, int b)
char char_func(char a, char b)
int main(void)
例子輸出結果:
[cpp]view plain
copy
int_func: 9
har_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:
[cpp]view plain
copy
#include
#include
#include
char *getmemory(int num)
int main(void)
例子輸出結果:
[cpp]view plain
copy
hello world
例子中的getmemory就是乙個指標函式,它返回malloc函式分配的一段記憶體的首位址。這裡須要注意的是getmemory返回值的資料型別和p的資料型別是一致的,都是char *。
思考題:嘗試分析下面宣告的含義?
[cpp]view plain
copy
char *(*ar[10])(int, int **p);
對比理解指標函式和函式指標
1 函式指標,可以這樣理解,它首先是乙個指標變數 一般佔4個位元組 只是它將要指向的資料型別為某種形式的函式。舉例如清單1 include int int func int a,int b char char func char a,char b int main void 例子輸出結果 int f...
指標函式與函式指標理解
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...