c++関数ポインタとデフォルトパラメータ
6505 ワード
#include
using namespace std;
inline void printA() { // ,
int a = 10;
cout << a << endl;
}
void printB(int ,int a=4) { //
cout << a << endl;
}
void printC(int a, int b, int c = 3, int d = 4){}//
typedef void(myTypeFunc)(int a, int b);// myTypeFunc
typedef void(*myTypeFunc2)(int a, int b);// myTypeFunc2
int main() {
printA();//c++ , , ,
printB(1);// ,
myTypeFunc *myfunc = NULL;//myfunc
myTypeFunc2 myfunc2; //myfunc2
myfunc = printB;// ,
myfunc(99, 98);
return 0;
}
デフォルトパラメータ1)C++では、関数宣言時にパラメータにデフォルト値を指定できます.関数呼び出し時にこのパラメータの値が指定されていない場合、コンパイラは、パラメータリストの後ろの部分のパラメータだけがデフォルトパラメータ値を提供できるように、自動的にデフォルト値を使用します.2)関数呼び出しでデフォルトパラメータ値の使用を開始すると、では、このパラメータの後のすべてのパラメータはデフォルトのパラメータ値を使用する必要があります.
//
void printAB(int x = 3)
{
printf("x:%d
", x);
}
// , ,
void printABC(int a, int b, int x = 3, int y=4, int z = 5)
{
printf("x:%d
", x);
}
int main62(int argc, char *argv[])
{
printAB(2);
printAB();
system("pause");
return 0;
}
関数占拠パラメータ
/*
,
,
*/
int func(int a, int b, int )
{
return a + b;
}
int main01()
{
//func(1, 2);
printf("func(1, 2, 3) = %d
", func(1, 2, 3));
getchar();
return 0;
}
int func2(int a, int b, int = 0)
{
return a + b;
}
void main()
{
// ,
func2(1, 2);
func2(1, 2, 3);
system("pause");
}
関数ポインタ形式:戻りタイプ(*関数名)(パラメータテーブル)
char(*pFun)(int);
char glFun(int a){ return; }
void main()
{
pFun = glFun;
(*pFun)(2);
}
最初の行はポインタ変数pFunを定義します.まず,前述した「形式1」に基づいて,ある関数を指すポインタであることを認識し,この関数パラメータはint型であり,戻り値はchar型である.最初の文だけはこのポインタを使用できません.まだ値を付けていないからです.
2行目は関数glFun()を定義します.この関数はintをパラメータとしてcharを返す関数です.ポインタの階層から関数を理解する必要があります.関数の関数名は実際にはポインタであり、関数名はその関数のコードのメモリ内のヘッダアドレスを指します.
それからmain()関数で、関数glFunのアドレスを変数pFunに割り当てます.main()関数の2番目の文「*pFun」は明らかにpFunが指すアドレスの内容を取り、もちろん関数glFun()の内容を取り出し、パラメータを2とする.
typedef宣言関数ポインタ形式:typedef戻りタイプ(*新しいタイプ)(パラメータテーブル)
typedef char (*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
typedefの機能は、新しいタイプを定義することです.最初の文はPTRFUNのタイプを定義し、intをパラメータとしてcharタイプを返す関数を指すポインタとして定義します.あとはint,charのようにPTRFUNが使えます.
2行目のコードは、この新しいタイプを使用して変数pFunを定義し、形式1のようにこの変数を使用することができます.