-23- Cゼロベースのコースや関数の戻りパラメータ値、基準変数

関数のパラメータ

関数呼び出し、パラメータの数と型は、関数プロトタイプと一致する必要があります。

引数に関わる形

関数呼び出し、伝送パラメータは、引数と呼ばれ、関数定義、パラメータリストで宣言されたパラメータは、パラメータと呼ばれます。
関数呼び出しの際、転送処理の引数は、実際には、なります複製、したがって、与えられたパラメータを内部関数のパラメータの値を変更し、それがパラメータに渡され、呼び出し元には影響しません。

void FakeChangeValue(int x)
{
    x += 5;
    printf("函数内部改变数值后:%d\r\n", x);
}

void main(void)
{
    int nValue = 100;
    printf("nValue: %d\r\n", nValue);
    FakeChangeValue(nValue);
    printf("nValue: %d\r\n", nValue);
}

別の例として、以下の関数、および2つの変数の値を交換する方法はありません。

void FakeSwap(int x, int y)
{
    int nTemp = y;
    y = x;
    x = nTemp;
}

関数の戻り値

この関数は、戻りを使用してreturn文のリターンを使用する2つの側面の意味合いがあります。

  • 床に呼び出し元に、現在の関数の実行およびリターンの終わり
  • 呼び出し元に対応する戻り値
#include <stdio.h>


int AddTwoNumber(int x, int y)
{
    printf("返回之前的语句\r\n");
    return x + y;
    printf("返回之后的语句\r\n");
}
void main(void)
{
    int nValue = 0;
    nValue = AddTwoNumber(10, 20);
    printf("%d\r\n", nValue);
}

戻り値の復帰後は、戻り値の型がvoidの関数プロトタイプと一致している必要があり、あなたは戻り値なしで返すことだけ必要があります。

#include <stdio.h>


void VoidFun()
{
    printf("返回之前的语句\r\n");
    return;
    printf("返回之后的语句\r\n");
}
void main(void)
{
    VoidFun();
}

可変個引数関数

宣言し、機能を実装し、パラメータリストが表示されます

...

それは、引数で渡されたパラメータの数が制限されていません表します。
実際には、我々はprintf関数を使用することはこれです:

C標準ライブラリ、va_listの、va_startマクロマクロ等では、関連するパラメータおよびマクロ機能、計算およびパラメータの可変数を変えることによって、次の例を参照してください。

#include <stdio.h>
#include <stdarg.h>

int Sum(int nFirst, ...)
{
    int nSum = 0, i = nFirst;

    va_list marker;

    va_start(marker, nFirst);
    while (i != -1)
    {
        nSum += i;
        i = va_arg(marker, int);
    }
    va_end(marker);
    return nSum;
}

void main(void)
{
    printf("求和: %d\n", Sum(2, 3, 4, -1));
    printf("求和: %d\n", Sum(5, 7, 9, 11, -1));
    printf("求和: %d\n", Sum(-1));
}

va_シリーズマクロノウハウを使用します。

  • 少なくともパラメータが存在する必要があります
  • パラメータの初期化を使用してのva_startと
  • 引数に勝つのva_arg使用
  • va_end初期化解除を使用し
  • 慣例ならびにエンドフラグパラメータを使用して、発信者、または事前に渡された引数の数のいずれか

おすすめ

転載: www.cnblogs.com/shellmad/p/11646264.html