2012-04-22 6 views
0

以下のコードで変数を送信する方法を混乱させ、値を「返す」ことなくその変数をスタックの一番上の値に変更する方法について混乱します。 1がトップにあったのであれば、私はstack.pop(変数)を行うことができ、その後、変数は、これは、参照でを渡されたパラメータである1C++ Stacks Pop General Theory

void DynIntStack::pop(int &num) 
{ 
    StackNode *temp; // Temporary pointer 

    // First make sure the stack isn't empty. 
    if (isEmpty()) 
    { 
     cout << "The stack is empty.\n"; 
    } 
    else // pop value off top of stack 
    { 
     num = top->value; 
     temp = top->next; 
     delete top; 
     top = temp; 
    } 
} 
+1

C++の参考文献はまったく理解していますか? – geekosaur

+0

はい、それは正しく理解していないのでしょうか? – chadpeppers

+0

あなたはpass-by-valueとpass-by-valueを見る必要があります。 –

答えて

3

等しくなります。

値だけでなく、実際のパラメータを渡すと考えることができます。パラメータに加えられた変更は、それらが同じ変数であるという理由だけで元の変数に反映されます。

実際には、パラメータは実際の値のメモリアドレスへの参照(ポインタ)です。あなたはあなたではなく、その値よりも、引数のアドレスを渡すためにコンパイラを言っているように

void setNum(int &num) { 
    num = 4; 
} 

main(...) { 
    int myNum = 2; 
    setNum(myNum); 
    cout << myNum << endl; 
} 

として、参照を取る関数を呼び出す

+0

ああ、私は今理解しています。したがって、実際の値ではなくメモリアドレスを参照しています。 – chadpeppers

1

。参照に値を割り当てると、そのアドレスのメモリが変更されます。次に、関数が戻ると、元の変数は同じアドレスを指しているので、新しい値を引き継ぎます。あなたは

void leaveNumUnchanged(int num) { 
    num++; 
    cout << "The new value is " << num << endl; 
} 
として、 をとる関数を宣言するときに一方

は、関数は、引数の独自のプライベートコピーを作成し、任意の操作はコピーのみに影響を与えます。