0

以下のコードで変数を送信し、その変数を値を「返す」ことなくスタックの最上位の値に変更する方法について混乱しています。したがって、1が一番上にある場合、stack.pop(variable)を実行すると、variableは1になります。

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;
   }
}
4

2 に答える 2

3

これは、参照によって渡されるパラメーターです。

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

実際には、パラメータは実際の値のメモリアドレスへの参照(ポインタ)です。

于 2012-04-22T22:14:17.163 に答える
1

次のような参照をとる関数を呼び出すとき

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

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

引数の値ではなく、引数のアドレスを渡すようにコンパイラーに指示しています。参照に値を割り当てると、そのアドレスのメモリが変更されます。次に、関数が戻ると、元の変数は同じアドレスを指しているため、新しい値を想定します。

一方、次のような値を取る関数を宣言する場合

void leaveNumUnchanged(int num) {
  num++;
  cout << "The new value is " << num << endl;
}

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

于 2012-04-22T22:20:38.497 に答える