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