(一)函數指針 定義:如果在程式中定義了一個函數,在編譯時,編譯系統為函數代碼分配一段存儲空間,這段存儲空間的起始地址稱為這個函數的指針。 (二)使用函數指針變數調用函數 小例子,取最大值 可見,定義指向函數的指針變數的一般格式類型名 (*指針變數名)(函數參數列表)int (*p) (int ,i ...
(一)函數指針
定義:如果在程式中定義了一個函數,在編譯時,編譯系統為函數代碼分配一段存儲空間,這段存儲空間的起始地址稱為這個函數的指針。
(二)使用函數指針變數調用函數
小例子,取最大值
#include<stdio.h> int main(){ int max(int x,int y); int (*p)(int,int); //定義指向函數的指針變數p int a=0,b=0,c=0; p=max; scanf("%d%d",&a,&b); printf("%d %d\n",a,b); c=(*p)(a,b); //通過指針變數調用max函數 printf("%d",c); } int max(int x,int y){ int z; if(x>y) z=x; else z=y; return(z); }
可見,定義指向函數的指針變數的一般格式
類型名 (*指針變數名)(函數參數列表)
int (*p) (int ,int)p是指向函數的指針變數,它只能指向函數的入口而不能指向函數中間的某一條指令
(三)指向函數指針作參數
小例子,用戶輸入兩個數a,b 當用戶輸入1時,取兩個數的最大值;當用戶輸入2時,取兩個數的最小值;當用戶輸入3時,取兩數之和
定義一個fun函數,每次只要將不同的函數名作為實參將其入口地址傳送給fun函數中的形參(即指向函數的指針變數)
1 #include<stdio.h> 2 int main(){ 3 int fun(int x,int y,int(*p)(int,int)); //fun函數聲明 4 int max(int,int); 5 int min(int,int); 6 int add(int,int); 7 int a,b,n; 8 scanf("%d%d",&a,&b); 9 printf("選擇1,2,3\n"); 10 scanf("%d",&n); 11 if(n==1) fun(a,b,max); //輸入1時調用max函數 12 else if(n==2) fun(a,b,min); //輸入2時min函數 13 else if(n==3) fun(a,b,add); //輸入3調用add函數 14 return 0; 15 } 16 int fun(int x,int y,int (*p)(int,int)){ 17 int result; 18 result=(*p)(x,y); 19 printf("%d\n",result); 20 } 21 int max(int x,int y){ //取最大值 22 int z; 23 if(x>y) z=x; 24 else z=y; 25 return(z); 26 } 27 int min(int x,int y){ //取最小值 28 int z; 29 if(x<y) z=x; 30 else z=y; 31 return(z); 32 } 33 int add(int x,int y){ //求兩數之和 34 int z; 35 z=x+y; 36 return(z); 37 }