Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在不访问StackType对象的情况下修改堆栈顶部_C++_Pointers_Stack - Fatal编程技术网

C++ 在不访问StackType对象的情况下修改堆栈顶部

C++ 在不访问StackType对象的情况下修改堆栈顶部,c++,pointers,stack,C++,Pointers,Stack,我对早些时候被问到的一个问题有疑问 我得到了这个函数prototypevoid StackPop(NodeType*Top),并被告知在不访问堆栈对象的情况下修改堆栈顶部StackPop函数这里是一个全局函数,而不是Stack类的成员函数。弹出后,Top应指向Top元素的新值 作为解决方案,只有在调用时将堆栈顶部节点的地址传递给函数,才能在这种情况下弹出堆栈顶部。例如:StackPop(&address) 修改堆栈顶部的步骤 NodeType* temp; temp = top; *top =

我对早些时候被问到的一个问题有疑问

我得到了这个函数prototype
void StackPop(NodeType*Top)
,并被告知在不访问堆栈对象的情况下修改堆栈顶部
StackPop
函数这里是一个全局函数,而不是Stack类的成员函数。弹出后,Top应指向Top元素的新值

作为解决方案,只有在调用时将堆栈顶部节点的地址传递给函数,才能在这种情况下弹出堆栈顶部。例如:
StackPop(&address)
修改堆栈顶部的步骤

NodeType* temp;
temp = top;
*top = (*top)->next;
delete temp;

这是对问题的简单回答还是必须注意的其他问题?

是的,这是对问题的有效简单回答,但有三点需要注意:

  • temp=top
    应为
    temp=*top
  • 您可能希望优雅地处理
    *top
    为NULL的情况(而不仅仅是取消对NULL指针的引用)
  • 此解决方案当然与您获得的原型不兼容[
    void StackPop(Node*Top)
    ],因为它将
    Node**
    作为其参数

  • 我唯一要说的是,
    StackPop
    听起来应该是一个成员函数,而不是自由函数。

    你的函数参数是
    Node
    还是
    NodeType
    ?@Als:edited。是的,它是
    NodeType
    。是的,它是一个自由函数,而不是类成员函数,但会影响上面所述的弹出功能(前提是我们忽略必须传递顶级节点地址的事实)?@Cipher:否,功能上没有区别。可以说是糟糕的设计。不以任何方式修改原型(即不更改为StackPop(NodeType**node))是否可能?