C言語で、仮引数と実引数はどのように引き渡されるのですか?
C言語では、仮引数と実引数は、関数呼び出しによって引き継がれます。関数を呼び出す場合は、関数の実引数(実際の引数)を指定する必要があります。これらの値は関数の仮引数(形式的引数)に引き継がれます。
引数に実引数を渡す手法はおおむね2種類ある
- 値渡し:実際の引数の値を仮引数にコピーし、関数の仮引数に対する変更は実際の引数の値に影響しません。
サンプルコード:
#include <stdio.h>
void changeValue(int x) {
x = 10; // 修改形参的值
}
int main() {
int num = 5; // 实参的值
changeValue(num); // 传递实参给形参
printf("num = %d\n", num); // 输出实参的值,仍然为 5
return 0;
}
- アドレス渡し:実引数のアドレスを仮引数に渡し、ポインタで実引数の値にアクセスし、関数内で仮引数を変更することで実引数の値にも影響を与える。
ネイティブに日本語で言い換えると、
#include <stdio.h>
void changeValue(int *x) {
*x = 10; // 通过指针修改实参的值
}
int main() {
int num = 5; // 实参的值
changeValue(&num); // 传递实参的地址给形参
printf("num = %d\n", num); // 输出实参的值,被修改为 10
return 0;
}
ただし、ポインタ変数が形参になると、アドレス渡しを用いて実引数の値を変更することができます。それ以外のポインタ変数以外の型の変数は、値渡しによってのみ実引数を形参に渡すことができます。