C の関数呼び出しメカニズムには、関数に引数を渡してそのコードを実行し、結果が存在する場合にはその結果を返します。パラメーターを渡すには、値渡し (変更は関数内で行われます) と参照渡し (変更は呼び出し元に反映されます) の 2 つの方法があります。値渡しでは、関数内の値の変更は元の値に影響しません (printValue など) が、参照渡しの変更は元の値に影響します (printReference など)。

#C 関数呼び出しメカニズムの詳細説明
はじめに
C では、関数呼び出しは、パラメーターを渡すことによってプログラムが特定のタスクを実行できるようにするメカニズムです。関数呼び出しには、次の手順が含まれます。
パラメータを渡す。 - 制御を関数本体に移します。
- 関数本体のコードを実行します。
- 戻り値を呼び出し元に返します (関数に戻り値がある場合)。
- 呼び出し元に制御を戻します。
-
値の受け渡しと参照の受け渡し
C には 2 つのパラメーター受け渡しメカニズムがあります。
- 値の受け渡し: パラメータは値によって関数に渡されます。関数内のパラメータに加えられた変更は、呼び出し元に渡される元の値には反映されません。
- 参照渡し: パラメーターは参照によって関数に渡されます。関数内のパラメータに加えられた変更は、呼び出し元に渡される元の値に反映されます。
#値による関数の呼び出し
1 2 3 4 5 6 7 8 9 | <strong>void printValue(int value) {
value++;
}
int main() {
int num = 10;
printValue(num);
cout << num << endl;
}</strong>
|
ログイン後にコピー
参照による関数の呼び出し
1 2 3 4 5 6 7 8 9 | <strong>void printReference(int &value) {
value++;
}
int main() {
int num = 10;
printReference(num);
cout << num << endl;
}</strong>
|
ログイン後にコピー
実用的なケース
最大公約数 (GCD) を見つける関数があるとします。疑似コードは次のとおりです:
1 2 3 4 5 6 7 | int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
|
ログイン後にコピー
値によって gcd 関数を呼び出します:
1 2 3 4 5 | <strong>int main() {
int a = 10, b = 12;
int gcdValue = gcd(a, b);
cout << "GCD: " << gcdValue << endl;
}</strong>
|
ログイン後にコピー
この場合、a と b の元の値は gcd 関数のパラメーター変更の影響を受けません。
gcd 関数の参照による呼び出し:
1 2 3 4 5 | <strong>int main() {
int a = 10, b = 12;
gcd(a, b);
cout << "GCD: " << a << endl;
}</strong>
|
ログイン後にコピー
参照によって渡すことにより、関数は a の値を変更できます。したがって、呼び出し元は GCD 値を受け取り、それを a.
以上がC++の関数呼び出しの仕組みを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。