C链表栈和指针

标签 c pointers reference stack

我是 C 的新手,正在尝试使用链表实现堆栈。当前设置堆栈,到目前为止一切正常。当我尝试将新节点推送到列表时,问题就出现了。 我目前有

main() 中,push() 被调用:

push(&(s.head), 'r');

函数push是:

void push(StackNodePtr *topPtr, char value){
    printf("topPtr value %c", (*topPtr)->data); // - Is currently 'p'

    StackNodePtr sNP;
    sNP = malloc(Node_Size);
    sNP->data = value;                          // - Is currently 'r'
    sNP->nextPtr = *topPtr;

    printf("\nsNP value - %c", sNP->nextPtr->data);      // Prints p... cool
    topPtr = &sNP;      // Just assigned it???
    printf("\ntopPtr at end of push = %c", (*topPtr)->data);    // prints r... cool
    // WHY YOU NO REFERENCE sNP LATER!?!?
}

同时,回到主界面:

    printf("\non the stack...%c", stackTop(s.head));  // prints 'p'

它似乎在推送中工作正常,但是我在 topPtr 指向的节点和 topPtr 的值上调用了 printf()过去常常打印出来(在本例中为“p”)。就我所进行的狩猎而言,它看起来和感觉都是正确的,我不知道我错过了什么。

会不会是我做topPtr = &sNP;的地方?

任何朝正确方向的“插入”都是好的插入...

最佳答案

topPtr = &sNP;      // Just assigned it???

这个赋值在函数外是不可见的。 topPtr 按值传递,即制作它的副本并将其传递给函数。因此,分配不同的值只会修改副本;原始参数仍然指向旧的内存位置。

如果您需要以这种方式修改参数,则需要另一个间接级别,即采用 StackNodePtr**

此外,我假设 StackNodePtrStackNode*typedef。我说得对吗? typedef 这个指针类型有充分的理由吗?通常它只会使事情复杂化。我会推荐 typedef 仅当指针类型确实是不透明类型时(即 Windows 上的 HANDLE)。

关于C链表栈和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10573934/

相关文章:

iphone - 我在 Xcode 中得到预期的标识符

iPhone ansi c : pointer being freed was not allocated

c++ - 是否可以获得 'this'指针的地址?

c++11 - 在 C++11 及更高版本中,常量引用仍然是最佳实践吗?

C 退出函数没有按照我的想法执行

c - 为什么这个 fgets() 循环永远不会结束?

c - 将 [CONST][] 数组传递给 C 函数?

c - 分段故障。错误退出c程序

c - 为什么在 LinkedList 的这个实现中会出现段错误

c++ - 这些 C++ 函数返回什么? ClassA*& func1()