ポインタ-関数へのポインタ

3497 ワード

1.ポインタ関数の定義:
プログラムに関数が定義されている場合、コンパイル時にコンパイルシステムは関数コードに割り当てられた記憶空間であり、この記憶空間の実際のアドレス(エントリアドレスとも呼ばれる)はこの関数のポインタと呼ばれる.
int(*p)(int,int)などの関数を指すポインタ変数を定義することができます.
関数の開始位置を格納するために使用されます.これは、このポインタ変数が関数を指すことを意味します.
次に、関数ポインタ変数で関数を呼び出す例を示します.
例:整数aとbの大きいものを関数で求める.
(1)関数名で関数を呼び出す
 
#include  
int main(){
     int max(int,int);
     int a,b,c;
     printf("please enter a and b:");
     scanf("%d,%d",&a,&b);
     c=max(a,b);
     printf("a=%d
b=%d
max=%d
",a,b,c); return 0; } int max(int x, int y){ int z; if(x>y) z=x; else z=y; return (z); }

 
(2)ポインタ変数によってその指す関数にアクセスする
 
#include 
int main(){
     int max(int,int);
     int (*p) (int,int);
     int a,b,c;
     p = max;
     printf("please enter a and b:");
     scanf("%d,%d",&a,&b);
     c = (*p)(a,b);
     printf("a=%d
b=%d
max=%d
",a,b,c); return 0; } int max(int x,int y){ int z; if(x>y) z=x; else z=y; return (z); }
 
 
2.指向関数のポインタ変数の定義と使用
関数ポインタ変数を定義する一般的な形式は、次のとおりです.
タイプ名(*ポインタ変数名)(関数パラメータテーブル列);
次に、関数を指すポインタ変数の使い方を例に挙げて説明します.
例:2つの整数を入力し、ユーザーに1または2を選択させ、1の呼び出しmax関数を選択し、両者の大数を出力し、2の呼び出しmin関数を選択し、両者の小数を出力します.
 
#include 

int main(){
     int max(int ,int);
     int min(int , int);
     int (*p)(int,int);
     int a,b,c,n;
     printf("please enter a and b:");
     scanf("%d,%d",&a,&b);
     printf("please choose 1 or 2:");
     scanf("%d",&n);
     if(n==1) p = max;
     else if(n==2) p = min;
     c = (*p)(a,b);
     printf("a=%d,b=%d
",a,b); if(n==1) printf("max=%d
",c); else printf("min = %d
",c); return 0; } int max(int x,int y){ int z; if(x>y) z=x; else z=y; return (z); } int min(int x,int y){ int z; if(x  

3.




, 。



: a b, 1,2 3。 1, a b , 2, a b , 3, a b 。

 

#include 
int main(){
     void fun(int x,int y,int (*p)(int,int));
     int max(int ,int);
     int min(int ,int);
     int add(int ,int);
     int a=34,b=-21,n;
     printf("please choose 1,2 or 3:");
     scanf("%d",&n);
     if(n==1) fun(a,b,max);
     else if(n==2) fun(a,b,min);
     else if(n==3) fun(a,b,add);
     return 0;
}

void fun(int x,int y,int (*p)(int,int)){
     int result;
     result= (*p)(x,y);
     printf("%d
",result); } int max(int x,int y){ int z; if(x>y) z=x; else z=y; printf("max="); return (z); } int min(int x,int y){ int z; if(x