我对以下代码如何发送变量然后将该变量更改为堆栈顶部的值而不“返回”值感到困惑。因此,如果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;
}
}
答案 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;
}
该函数创建自己的参数私有副本,任何操作都只影响副本。