C++堆叠流行一般理论

C++ Stacks Pop General Theory

本文关键字:理论 流行 C++      更新时间:2023-10-16

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

这是一个通过引用传递的参数。

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

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

当您调用接受引用的函数时,例如

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

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