0

以下のコード スニペットを見てください。3 つの関数を宣言しました (つまり、1 つは int を渡し、もう 1 つは int への参照を渡します)。プログラムを実行した後、関数 (tripleByReference) を呼び出した後の "count" 変数の値が、そのトリプルを反映するように変更されていないことがわかりました (count は 5 のままです)。ただし、関数 (tripleByReferenceVoid) を呼び出すと変数が変更されますが、これは、変更が変数 (カウント) に直接発生したためです。

参照渡しを使用すると、呼び出し元は呼び出された関数に呼び出し元のデータに直接アクセスして変更する機能を与えることを理解していますが、変数を関数に渡すことでは実現できませんでした (tripleByReference) - これを理解するのを手伝ってください。

#include <iostream>
using namespace std;

/* function Prototypes */
int tripleByValue(int);
int tripleByReference(int &);
void tripleByReferenceVoid(int &);

int main(void)
{
    int count = 5;

    //call by value
    cout << "Value of count before passing by value is: " << count << endl;
    cout << "Passing " << count << " by value, output is: "
         << tripleByValue(count) << endl;
    cout << "Value of count after passing by value is: " << count << endl;

    //call by reference - using int tripleByReference
    cout << "\n\nValue of count before passing by reference is: " << count << endl;
    cout << "Passing " << count << " by reference, output is: " 
         << tripleByReference(count) << endl;
    cout << "Value of count after passing by reference is: " << count << endl;

     //call by reference - using void tripleByReference
     tripleByReferenceVoid(count);
     cout << "\n\nValue of count after passing by reference is: " << count << endl;
    cout << endl;
    system("PAUSE");
    return 0;
}//end main

int tripleByValue (int count) {
    int result = count * count * count;
    return result; 
}//end tirpleByValue function

int tripleByReference(int &count) {
     int result = count * count * count;
     return result; //perform calcs     
}//end tripleByReference function

void tripleByReferenceVoid(int &count) {
     count *= count * count;
}//end tripleByReference function

ありがとうございました。

4

2 に答える 2

4

tripleByReferencecount割り当てないため、値は変更されません。代わりに値を返しています。

tripleByReferenceVoid異なります。それに ( ) を割り当てているcount *= ...ため、これらの変更が反映されます。

于 2012-07-05T19:08:51.940 に答える
3

関数tripleByReferenceでは の値を変更しようとさえしていませんがcount、関数tripleByReferenceVoidでは を明示的に変更してcountいます。したがって、明らかで期待される効果: 後者の関数は を変更しますcountが、前者は変更しません。つまり、これらの関数は、明示的かつ意識的に要求したことだけを正確に実行します。

このような質問は、なぜそれを尋ねたのかを理解することが事実上不可能であるため、答えるのが難しい. この 2 つの関数の動作が異なることに戸惑っているようです。しかし、あなた自身が明確にその特定の点で異なるように書いたのに、なぜそれはあなたを困惑させるのですか?

于 2012-07-05T19:13:43.870 に答える