C ++ Stacks Pop General Theory

时间:2012-04-22 22:10:36

标签: c++ stack pop

我对以下代码如何发送变量然后将该变量更改为堆栈顶部的值而不“返回”值感到困惑。因此,如果1位于顶部,我可以执行stack.pop(变量),然后变量将等于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;
   }
}

2 个答案:

答案 0 :(得分:3)

这是通过引用传递的参数

您可以将其视为传递实际参数,而不仅仅是值。对参数所做的任何修改都会反映到原始变量,因为它们是同一个变量。

实际上,该参数是实际值的内存地址的引用(指针)。

答案 1 :(得分: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;
}

该函数创建自己的参数私有副本,任何操作都只影响副本。