我是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'

它在push中似乎工作得很好,但是我在printf()指向的节点上调用topPtr,而topPtr的值则被打印出来(在本例中为“p”)。从我打猎的情况来看,它看起来和感觉都是对的,我不知道我错过了什么。
可能是我在哪里做的吗?
任何朝正确方向的“推”都是很好的推。。。

最佳答案

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

不,你没有。你给指针的本地副本赋值。您更改topPtr本身的值,它不会超出范围。相反,您应该写入它指向的位置:
*topPtr = sNP;

08-28 05:41