int(*p)(int, int);這個語句就定義了一個指向函數的指標變數 p。首先它是一個指標變數,所以要有一個“*”,即(*p);其次前面的 int 表示這個指標變數可以指向返回值型別為 int 型的函數;後面括號中的兩個 int 表示這個指標變數可以指向有兩個引數且都是 int 型的函數。所以合起來這個語句的意思就是:定義了一個指標變數 p,該指標變數可以指向返回值型別為 int 型,且有兩個整型引數的函數。p 的型別為 int(*)(int,int)。
函數返回值型別 (* 指標變數名) (函數參數列);
“函數返回值型別”表示該指標變數可以指向具有什麼返回值型別的函數;“函數參數列”表示該指標變數可以指向具有什麼參數列的函數。這個參數列中只需要寫函數的引數型別即可。int Func(int x); /*宣告一個函數*/ int (*p) (int x); /*定義一個函數指標*/ p = Func; /*將Func函數的首地址賦給指標變數p*/賦值時函數 Func 不帶括號,也不帶引數。由於函數名 Func 代表函數的首地址,因此經過賦值以後,指標變數 p 就指向函數 Func() 程式碼的首地址了。
# include <stdio.h> int Max(int, int); //函數宣告 int main(void) { int(*p)(int, int); //定義一個函數指標 int a, b, c; p = Max; //把函數Max賦給指標變數p, 使p指向Max函數 printf("please enter a and b:"); scanf("%d%d", &a, &b); c = (*p)(a, b); //通過函數指標呼叫Max函數 printf("a = %dnb = %dnmax = %dn", a, b, c); return 0; } int Max(int x, int y) //定義Max函數 { int z; if (x > y) { z = x; } else { z = y; } return z; }輸出結果是: