C言語で、仮引数と実引数はどのように引き渡されるのですか?

C言語では、仮引数と実引数は、関数呼び出しによって引き継がれます。関数を呼び出す場合は、関数の実引数(実際の引数)を指定する必要があります。これらの値は関数の仮引数(形式的引数)に引き継がれます。

引数に実引数を渡す手法はおおむね2種類ある

  1. 値渡し:実際の引数の値を仮引数にコピーし、関数の仮引数に対する変更は実際の引数の値に影響しません。

サンプルコード:

#include <stdio.h>

void changeValue(int x) {
    x = 10;  // 修改形参的值
}

int main() {
    int num = 5;  // 实参的值
    changeValue(num);  // 传递实参给形参
    printf("num = %d\n", num);  // 输出实参的值,仍然为 5
    return 0;
}
  1. アドレス渡し:実引数のアドレスを仮引数に渡し、ポインタで実引数の値にアクセスし、関数内で仮引数を変更することで実引数の値にも影響を与える。

ネイティブに日本語で言い換えると、

#include <stdio.h>

void changeValue(int *x) {
    *x = 10;  // 通过指针修改实参的值
}

int main() {
    int num = 5;  // 实参的值
    changeValue(&num);  // 传递实参的地址给形参
    printf("num = %d\n", num);  // 输出实参的值,被修改为 10
    return 0;
}

ただし、ポインタ変数が形参になると、アドレス渡しを用いて実引数の値を変更することができます。それ以外のポインタ変数以外の型の変数は、値渡しによってのみ実引数を形参に渡すことができます。

bannerAds