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のようにこの変数を使用することができます.