C語言函式指標變數?

在C語言中,一個函式總是佔用一段連續的記憶體區,而函式名就是該函式所佔記憶體區的首地址。我們可以把函式的這個首地址(或稱入口地址)賦予一個指標變數,使該指標變數指向該函式。然後通過指標變數就可以找到並呼叫這個函式。我們把這種指向函式的指標變數稱為“函式指標變數”。

函式指標變數定義的一般形式為:

型別說明符 (*指標變數名)();

其中“型別說明符”表示被指函式的返回值的型別。“(* 指標變數名)”表示“*”後面的變數是定義的指標變數。最後的空括號表示指標變數所指的是一個函式。例如:

int (*pf)();

表示pf是一個指向函式入口的指標變數,該函式的返回值(函式值)是整型。

【例10.31】本例用來說明用指標形式實現對函式呼叫的方法。

int max(int a,int b){

if(a>b)return a;

else return b;

}

main(){

int max(int a,int b);

int(*pmax)();

int x,y,z;

pmax=max;

printf("input two numbers:\n");

scanf("%d%d",&x,&y);

z=(*pmax)(x,y);

printf("maxmum=%d",z);

}

從上述程式可以看出用,函式指標變數形式呼叫函式的步驟如下:

先定義函式指標變數,如後一程式中第9行 int (*pmax)();定義 pmax為函式指標變數。

把被調函式的入口地址(函式名)賦予該函式指標變數,如程式中第11行 pmax=max;

用函式指標變數形式呼叫函式,如程式第14行 z=(*pmax)(x,y);

呼叫函式的一般形式為:(*指標變數名) (實參表)

使用函式指標變數還應注意以下兩點:

函式指標變數不能進行算術運算,這是與陣列指標變數不同的。陣列指標變數加減一個整數可使指標移動指向後面或前面的陣列元素,而函式指標的移動是毫無意義的。

函式呼叫中"(*指標變數名)"的兩邊的括號不可少,其中的*不應該理解為求值運算,在此處它只是一種表示符號。

相關問題答案