VC++学習の道

1984 ワード

 C++ ,            、       。         ,                   ,

, , , 。

 

C++ , 。

(* )();

 
// a b     

#include "stdafx.h"
#include <iostream>

using namespace std;

int findMax(int x,int y);

/************************************************************************/
/* void main()
{
int a,b,c;
cin >>a>>b;
c=findMax(a,b);
cout <<c;
}                                                                     */
/************************************************************************/

//             , main   :
void main()
{
	int a,b,c;
	cin >>a>>b;
	int (*p)(int x,int y);
	p = findMax;
	c = (*p)(a,b);
	cout <<c;

}

int findMax(int x,int y)
{
	if(x<y)return y;
	if(x>y)return x;
}

説明:
(1)“int(*p);”int*p()と書かないで、戻り値が整数データの関数を指すポインタを説明します.
(2)p=findMax;ポインタ変数pに関数のエントリアドレスを与えることを表すと、*pは関数findMaxであるため、「c=(*)(a,b)」と「c=findMax(a,b)」は等価である.
注意:
(1)関数の呼び出しは,関数名で呼び出すこともできるし,関数ポインタで呼び出すこともできる.
(2)「int(*p)(int x,int y);どの関数を指すかを固定するのではなく、関数を指すポインタ変数を定義することを表すだけで、
プログラムでどの関数のアドレスを与えるかは、どの関数を指します.
(3)関数を指すポインタ変数に値を与える場合、p=findMaxなどのパラメータを与える必要がなく、関数名を与えるだけでよい.
(4)指向関数のポインタ変数に対してp+n,p+,p−等の算術演算を行うことは無意味である. 
2.関数を指すポインタ変数を関数パラメータとする
関数を指すポインタ変数の一般的な用途の一つは,ポインタをパラメータとして他の関数に渡すことである.関数のパラメータは、変数、配列名、変数を指すポインタ変数、配列を指すポインタ変数などである、
現在、関数を指すポインタ変数は、関数アドレスの伝達を実現するために関数パラメータとしてもよい.例:
sub(int (*x1)(int x),int (*x2)(int y))
{
int a,b;
.................
(*x1)(a);
(*x2)(b);
}