我猜这个问题非常有趣。我正在尝试在C中实现Stack。这是我的标题和实现文件(我还实现了Push):
my.h:
typedef struct {
char type[3];
int nrOfOpr;
int num;
} BizarreNumber_t;
struct stackNode {
BizarreNumber_t data;
struct stackNode *nextPtr;
};
// stack related
extern void push(struct stackNode *topPtr, BizarreNumber_t info);
my.c:
void push(struct stackNode *topPtr, BizarreNumber_t info){
struct stackNode *newTop = malloc(sizeof(struct stackNode));
struct stackNode oldTop = *topPtr;
newTop->data=info;
newTop->nextPtr=&oldTop;
*topPtr=*newTop;
// printf("topPtr->next->data: %s\n", topPtr->nextPtr->data.type);
//
// printf("oldTop->data: %s\n", oldTop.data.type);
// printf("newTop->data: %s\n", newTop->data.type);
// printf("topPtr->data: %s\n", topPtr->data.type);
}
最后这是我的main.c:
int main(int argc, char const *argv[]) {
struct stackNode* stackHead=malloc(sizeof(struct stackNode));
BizarreNumber_t a={"sa",1,1};
BizarreNumber_t b={"as",2,2};
stackHead->data=a;
stackHead->nextPtr=NULL;
printf("%s\n", stackHead->data.type);
push(stackHead,b);
printf("%s\n", stackHead->nextPtr->data.type);//HERE!!!
return 0;
}
主要是我写的这行#34; HERE !!!"没有正确地给出真正的输出。实际上它没有给出任何东西。有趣的是,whis给出了正确的输出:
printf("%c\n", stackHead->nextPtr->data.type[0]);
我试图打印出字符串中的每个字符,结果说String很好。但我看不到。为什么会这样?
答案 0 :(得分:0)
stackHead
是在main()
函数中创建的局部变量。在stackHead
方法中对push()
所做的任何修改或更改都不会影响main()
方法,因为它只是按值调用。
而不是将stackHead
的地址传递给push()
方法
push(&stackHead,b); /* pass the address of stackhead */
并相应地更改push()
的定义。
void push(struct stackNode **topPtr, BizarreNumber_t info){
struct stackNode *newTop = malloc(sizeof(struct stackNode));
newTop->data = info;
newTop->nextPtr = *topPtr; /*new node next make it to head node */
*topPtr=newTop; /*update the head node */
}