顧名思義,函式指標就是函式的指標。它是一個指標,指向一個函式。看例子:
A),char * (*fun1)(char * p1,char * p2);
B),char * *fun2(char * p1,char * p2);
C),char * fun3(char * p1,char * p2);
陣列引數等效的指標引數
陣列的陣列:char a[3][4] 陣列的指標:char (*p)[10]
指標陣列: char *a[5] 指標的指標:char **p
看看上面三個表示式分別是什麼意思?
C):這很容易,fun3 是函式名,p1,p2 是引數,其型別為char *型,函式的`返回值為char *型別。
B):也很簡單,與C)表示式相比,唯一不同的就是函式的返回值型別為char**,是個二級指標。
A):fun1 是函式名嗎?回憶一下前面講解陣列指標時的情形。我們說陣列指標這麼定義或許更清晰:
int (*)[10] p;
再看看A)表示式與這裡何其相似!明白了吧。這裡fun1 不是什麼函式名,而是一個指標變數,它指向一個函式。這個函式有兩個指標型別的引數,函式的返回值也是一個指標。
同樣,我們把這個表示式改寫一下:char * (*)(char * p1,char * p2) fun1; 這樣子是不是好看一些呢?只可惜編譯器不這麼想