ポインタ-関数へのポインタ
3497 ワード
1.ポインタ関数の定義:
プログラムに関数が定義されている場合、コンパイル時にコンパイルシステムは関数コードに割り当てられた記憶空間であり、この記憶空間の実際のアドレス(エントリアドレスとも呼ばれる)はこの関数のポインタと呼ばれる.
int(*p)(int,int)などの関数を指すポインタ変数を定義することができます.
関数の開始位置を格納するために使用されます.これは、このポインタ変数が関数を指すことを意味します.
次に、関数ポインタ変数で関数を呼び出す例を示します.
例:整数aとbの大きいものを関数で求める.
(1)関数名で関数を呼び出す
(2)ポインタ変数によってその指す関数にアクセスする
2.指向関数のポインタ変数の定義と使用
関数ポインタ変数を定義する一般的な形式は、次のとおりです.
タイプ名(*ポインタ変数名)(関数パラメータテーブル列);
次に、関数を指すポインタ変数の使い方を例に挙げて説明します.
例:2つの整数を入力し、ユーザーに1または2を選択させ、1の呼び出しmax関数を選択し、両者の大数を出力し、2の呼び出しmin関数を選択し、両者の小数を出力します.
プログラムに関数が定義されている場合、コンパイル時にコンパイルシステムは関数コードに割り当てられた記憶空間であり、この記憶空間の実際のアドレス(エントリアドレスとも呼ばれる)はこの関数のポインタと呼ばれる.
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