値渡しと参照渡しとは

百草
リリース: 2023-12-15 15:03:46
オリジナル
2446 人が閲覧しました

値の受け渡しとは、パラメーターのコピーを関数に渡すことです。そのため、関数はパラメーター自体ではなく、パラメーター値のコピーを受け取ります。関数内のパラメーターに対する変更は、このコピーにのみ影響します。パラメータではなく、元の変数の値に影響します。参照渡しとは、パラメータのアドレスまたは参照を関数に渡すことです。これは、関数がデータのコピーではなく、元のデータへの参照を受け取ることを意味します。関数内のパラメーターに加えられた変更は、元のデータに直接影響します。これら 2 つの配信方法には、さまざまなプログラミング言語やシナリオで独自の用途、長所と短所があります。

値渡しと参照渡しとは

このチュートリアルのオペレーティング システム: Windows 10 システム、DELL G3 コンピューター。

値による受け渡しと参照による受け渡しは、パラメーターを渡す 2 つの一般的な方法であり、プログラミング言語で関数から関数にデータを渡すために使用されます。これら 2 つの転送方法には、データの処理において本質的な違いがあります。

1. 値の受け渡し

値の受け渡しとは、パラメーターのコピーを関数に渡すことで、関数はパラメーター値のコピーを受け取ります。パラメータ自体ではありません。関数内のパラメータを変更すると、元の変数の値ではなく、このコピーにのみ影響します。値による受け渡しは、C および C の基本データ型 (int、float など) でよく使用されます。

値の受け渡しの主な特徴は、関数がパラメーターへの参照ではなく、パラメーターの実際の値を受け取ることです。これは、関数が値によって渡された引数を受け取ると、実際には元の引数自体ではなく、引数値のコピーを操作することを意味します。したがって、関数内のパラメーターを変更しても、元の変数の値には影響しません。

たとえば、C 言語では、値の受け渡しは次の方法で実現できます。

void increment(int a) {  
    a = a + 1;  
}  
  
int main() {  
    int x = 5;  
    increment(x);  
    printf("%d\n", x); // 输出仍然是5,因为函数increment操作的是x的副本,不影响x本身  
    return 0;  
}
ログイン後にコピー

この例では、インクリメント関数は整数パラメーター a を受け取り、 1 を追加することでその値を変更します。ただし、a は x の単なるコピーであるため、この変更は元の変数 x の値には影響しません。

2. 参照による受け渡し

値による受け渡しとは異なり、参照による受け渡しでは、パラメーターのアドレスまたは参照を関数に渡します。 これは、関数がデータのコピーではなく、元のデータへの参照を受け取ることを意味します。関数内のパラメーターに加えられた変更は、元のデータに直接影響します。

参照渡しの主な特徴は、関数がデータのコピーではなく、元のデータへの参照を受け取ることです。これは、関数が参照によって渡された引数を受け取るとき、それは実際には元のデータへの直接参照であるため、引数を変更すると元のデータに影響を与えることを意味します。

C では、参照の受け渡しはポインターまたは参照を使用して実現できます。

void increment(int* a) {  
    *a = *a + 1;  
}  
  
int main() {  
    int x = 5;  
    increment(&x);  
    std::cout << x << std::endl; // 输出是6,因为函数increment直接修改了x的值  
    return 0;  
}
ログイン後にコピー

この例では、インクリメント関数は整数を指すポインター a を受け取り、ポインター値を逆参照することでそれを変更します。 ×の。 a は x への参照であるため、*a を変更すると x の値に直接影響します。したがって、increment(&x) が呼び出されると、x の値は 6 に変更されます。

要約すると、値転送と参照転送の主な違いは次のとおりです: 値転送はパラメータ値のコピーを転送することであり、コピーの変更は元のデータに影響を与えませんが、参照転送はパラメータ値を転送することです。元のデータへの参照。参照への変更は元のデータに直接影響します。これら 2 つの配信方法には、さまざまなプログラミング言語やシナリオで独自の用途、長所と短所があります。

以上が値渡しと参照渡しとはの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート