関数

宣言 (Declaration)

引数 (Arguments)

引数には、

  • 仮引数 (formal arguments) … 関数が受け取った情報へアクセスするための情報
  • 実引数 (actual arguments) … 関数へ渡す情報

の2つがあります。仮引数と実引数 | MSDN

void Func( int a ); // aが仮引数
...
Func( 10 ); // 10が実引数

値渡しと参照渡し

既定では値渡しで、引数のコピーが仮引数へ渡されます。これを参照で渡すには、ポインタを用います。

void Func( int *p );
...
int a;
Func( &a );
引数 | MSDN
class MyClass
{
public:
    int x;
};

// ポインタ型の仮引数
void Func1( MyClass *p )
{
    p->x++;
}

// 参照型の仮引数
void Func2( MyClass &r )
{
    r.x++;
}

...

MyClass a;
a.x = 10;

Func1( &a ); // a.xは11
Func2( a );  // a.xは12


MyClass *p = new MyClass();
p->x = 10;

Func1( p );
Func2( *p );
参照型関数の引数 | MSDN

参考

デフォルト引数 (Default arguments)

void Func( int a = 10 );
void Func( int a = 10, int b = 20 );

void Func( int a,      int b = 20 ); // OK
void Func( int a = 10, int b      ); // エラー
  • 宣言側
    • 宣言で記述する。定義では記述しない。
    • 仮引数の末尾から連続して順に指定する。途中に欠落は認められない。
  • 呼び出し側
    • デフォルト引数が指定されている引数は省略できるが、それ以外は省略できない。
    • 指定した引数から末尾まで、すべて指定する。途中に欠落は認められない。

可変個引数 (Variable argument)

type va_arg(
    va_list arg_ptr,
    type
    );
void va_copy(
    va_list dest,
    va_list src
    ); // (ISO C99 and later)
void va_end(
    va_list arg_ptr
    );
void va_start(
    va_list arg_ptr,
    prev_param
    ); // (ANSI C89 and later)
void va_start(
    arg_ptr
    ); // (Pre-ANSI C89 standardization version)

参考

戻り値 (Return Values)

再帰関数 (Recursive Functions)

関数内で自身を呼び出す関数です。

参考

参考書

Microsoft Learnから検索