Pass by ValueとPass by Referenceの違いとは?

スポンサーリンク
スポンサーリンク


値によるパスと参照によるパスの主な違いは、値によるパスでは、パラメータの値が別の変数にコピーされるのに対し、参照によるパスでは、実際のパラメータが関数に渡されることである

コンピュータプログラムは、CPUにあるタスクを実行するように指示する命令の集合体です。

効率的で効果的なプログラムを書くために、プログラミングには様々なコンセプトがあります。

そのひとつが関数で、再利用可能なステートメントの集まりです

すべての文を同じプログラムに書くのではなく、いくつかの関数に分割して、メインプログラムの中で呼び出すことが可能です

それによって、プログラムの管理がしやすくなり、メンテナンスも容易になる。

このとき、関数を呼び出す方法は2つある。

それは、値渡しと参照渡しを使う方法です。

スポンサーリンク

パス・バイ・バリューとは

値渡しでは、関数のパラメータの値がメモリの別の場所にコピーされます。

関数内で変数にアクセスしたり変更したりするときは、コピーされた値だけにアクセスします。

従って、元の値には影響がありません。

上図のプログラムでは、変数valueに整数の5が格納されている。

findNewValueは関数です。

valueはその関数に渡される。

関数内では、値がnewValueという新しいメモリ位置にコピーされます。

そして、この関数は整数を返します。

そして、この整数はメイン関数のnewValue変数に格納されます。

最後に、newValueはコンソールに表示されます。

この関数では、新しいメモリ位置にコピーされた値をnewValueと呼びます。

変更はそのnewValueに対して行われ、元の値には行われない。

この方法をPass by Valueと呼びます。

参照渡しとは

参照渡しでは、メモリアドレスがその関数に渡されます。

つまり、その関数は実際の変数にアクセスすることができる。

以下にその例を示します。

図2:参照渡しを用いたC言語プログラム

変数valueには整数の5が格納されている。

findNewValueは関数です。

メモリ位置valueのアドレスは、その関数に渡される。

したがって、この関数はこの値を取得する。

newValueはポインタです。

これは、valueという元のメモリロケーションを指しています。

この関数は、newValueが指す元の値に5を加算します。

そして、計算された値が返され、newValue変数に格納されます。

最後に、newValueがコンソールに表示されます。

このメソッドでは、メモリロケーションが関数に渡されます。

したがって、変更は元の値に対して行われます。

したがって、このメソッドはPass by Referenceと呼ばれます。

値による受け渡しと参照による受け渡しの違い

定義

値渡しとは、関数のパラメータ値を別の変数にコピーする仕組みを指し、参照渡しとは、実際のパラメータを関数に渡す仕組みを指します。

これが値渡し、参照渡しの主な違いです。

変更点

値渡しでは、関数内部での変更は元の値には反映されません。

一方、参照渡しでは、関数内部での変更は元の値に反映されます。

この点も、値による受け渡しと参照による受け渡しの違いと言えるでしょう。

実際のパラメータ

また、値渡しでは、実際のパラメータのコピーが作成されます。

一方、参照渡しの場合は、実際のパラメーターのアドレスが関数に渡されます。

機能との関連性

値による受け渡しと参照による受け渡しのもう一つの違いは、値による受け渡しでは、関数が実際の内容のコピーを取得するのに対し、参照による受け渡しでは、関数が元の変数の内容にアクセスする点です。

必要メモリ

また、値による受け渡しは参照渡しよりも多くのメモリを必要とします

所要時間

時間要件は、値によるパスと参照によるパスのもう一つの違いです。

値渡しでは値をコピーするため時間がかかるのに対し、参照渡しではコピーしないため時間がかからない。

結論

値渡し」と「参照渡し」の主な違いは、「値渡し」ではパラメータの値が別の変数にコピーされるのに対し、「参照渡し」では実際のパラメータが関数に渡される点です。

タイトルとURLをコピーしました