![Pass by Reference vs. Pass by Value in C : When Do Modifications Affect the Calling Function?](https://img.php.cn/upload/article/000/000/000/173471371490169.jpg)
参照渡しと値渡し: 明確な区別
C の領域では、参照渡しと値渡しの概念がしばしば混乱を引き起こします。 。基本的に、値渡しには引数変数のコピーの作成が含まれますが、参照渡しには元の変数へのエイリアスが使用されます。
ステートメント「関数がその値を変更すると、その変更は関数のスコープ内にも表示されます」値渡しと参照渡しの両方で関数を呼び出す」は、次のように理解できます:
-
Pass by Reference:関数が引数によって参照されるオブジェクトを変更すると、その変更は呼び出し元のスコープ内の元のオブジェクトに反映されます。これは、引数の参照が元のオブジェクトに直接接続されているため、引数を介してオブジェクトに加えられた変更は、実質的に元のオブジェクトに加えられるためです。
-
値による渡し: 驚くべきことに、値渡しの場合、関数内で行われた変更は呼び出しスコープに引き続き表示されます。これは、値渡し中に作成されるコピーが浅いコピーにすぎないためです。コピーのメンバー変数に加えられた変更は、元のオブジェクトに反映されます。したがって、参照渡しと値渡しの両方で、関数内で行われた変更を呼び出しスコープで確認できます。
さらに明確にするために、引数を渡すためのさまざまなアプローチを検討してみましょう。
-
値による受け渡し (コピーによる受け渡し): 関数のパラメーターは引数のコピーです。パラメーターに加えられた変更は、元の変数には影響しません。
-
ポインターへの参照渡し (Pass By Reference): 関数のパラメーターは、元の変数へのポインターです。パラメーター (ポインター) に加えられた変更は、元の変数に影響します。
-
参照による受け渡し (真の参照による受け渡し): 関数内のパラメーターは、元の変数への参照です。パラメーターに加えられた変更は、元の変数に直接影響します。
これらの違いを理解することは、効果的なコードの作成とデバッグに不可欠です。
以上がC における参照渡しと値渡し : 変更が呼び出し関数に影響するのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。