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

你告诉编译器传递参数的地址,而不是它的值。当您为引用分配值时,它会更改该地址处的内存。然后,当函数返回时,原始变量仍然指向相同的地址,因此它采用新值。

另一方面,当您声明一个接受value的函数时,例如

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

该函数制作自己的参数的私有副本,并且任何操作仅影响副本。

于 2012-04-22T22:20:38.497 回答