1. 序章

変数再生する重要コンピュータプログラミングにおける役割彼らプログラマーが柔軟なプログラムを作成できるようにします。 変数について覚えておく必要がある非常に重要な側面は、変数を関数の引数として渡す場合です。

このチュートリアルでは、関数の呼び出し元が値と参照によって呼び出し先に引数を渡すときに内部で何が起こるかを探ります。

2. 値による呼び出し

値による呼び出しは、値による受け渡しとも呼ばれ、引数を渡す最も一般的な方法です。 パラメーターを値で渡す場合、呼び出し元と呼び出し先には、同じ値を持つ2つの独立変数があります。 したがって、呼び出し先がその変数を変更した場合、その効果は呼び出し元には表示されません。 実際、変数の独自のコピーがあります。

上記の例では、呼び出し元は変数を作成し、それに値を割り当てます。 この時点で、の値を出力すると、結果として明確になります。

重要なステップは、呼び出し元が呼び出し先を呼び出し、変数を値で渡すときです。 オペレーティングシステムは、と同じ値を持つ新しい独立変数を作成します。 呼び出し先が変数を追加するだけで変数を変更すると、呼び出し元はその効果を確認できません。 実際、呼び出し元が2回目に変数を出力した場合でも、結果として取得されます。

3. 参照による呼び出し

参照によって変数を渡す場合、呼び出し先内のパラメーターは、呼び出し元が渡したのと同じオブジェクトを参照します。 結果として、オブジェクトに対して呼び出し先が操作した変更は、呼び出し元にも表示されます

つまり、パラメーターが参照によって渡される場合、呼び出し元と呼び出し先は同じ変数を使用します。 呼び出されている関数がこの変数を変更する場合、その効果は呼び出し元の変数に表示されます。

前の例のように、呼び出し元は変数を作成し、それに値を割り当てます。 印刷すると、結果が得られます。

次に、呼び出し元は呼び出し先を呼び出し、参照によって変数を渡します。 オペレーティングシステムは、の値のコピーを含む新しい変数ではなく、変数への暗黙の参照を作成します。 呼び出し先がに追加すると、呼び出し元はその効果を確認できます。 実際、後続のprintステートメントは結果として返されます。

4. 現代語での値による呼び出しと参照による呼び出し

最新のプログラミング言語は通常、データをヒープに格納しますそれへの「ポインタ」のみが変数に保持され、パラメータとして渡されます

変数の値は技術的にはポインタ自体であり、ポイントされたオブジェクトではないため、このようなポインタを渡すことは依然として値によって渡されます。 ただし、プログラムへの最終的な影響は、値渡しまたは参照渡しのいずれかと同じにすることができます。

  • 呼び出し元が呼び出し先にポインターを渡す場合、これは参照渡しと同じ効果があります。 実際、呼び出し元には、参照されたオブジェクトへの変更が表示されます。 ただし、呼び出し先がこのポインターを保持している変数を再割り当てすると、変数はそのオブジェクトを指すのを停止します。 この変数に対するそれ以上の操作は、代わりに、現在指しているものに影響を与えます。
  • 呼び出し元がオブジェクトのディープコピーを呼び出し先に渡す場合、値渡しと同じ効果が得られます。 さらに、一部のプログラミング言語には「不変」タイプがあり、引数として渡すときに常に値による呼び出しの効果があります。

参照による呼び出しを使用することにより、呼び出された関数と呼び出し元の関数の間の追加の通信チャネルにアクセスできます。 ただし、参照によって変数を渡すと、関数呼び出しの効果を追跡することがより困難になり、微妙なバグが発生する可能性があります。

5. 結論

この記事では、値渡しと参照渡しの概念を紹介しました。