猿问

为什么打印的data不是36,而是0?

#include <stdio.h>#include <stdlib.h> #define fail 0 #define success 1 #define status int typedef struct node{ int data; struct node *next; }*Snode,*pStack,*LinkedStack; LinkedStack myStack=(LinkedStack)malloc(sizeof(struct node));pStack top; //初始化链栈 LinkedStack makeStack(LinkedStack myStack,pStack top) { myStack->data=-1; myStack->next=NULL; top=myStack; return myStack; } //判空 bool Stack_Empty(void) { return (top==myStack); } //入栈 status Push(LinkedStack myStack,int data) { LinkedStack cursor=myStack; Snode newNode=(Snode)malloc(sizeof(struct node)); newNode->data=data; newNode->next=NULL; top=newNode; while(cursor->next) { cursor=cursor->next; } cursor->next=newNode; //此处还要补上将该新结点插入链栈myStack的末尾 return success; } //出栈 int* Pop(LinkedStack myStack,int *data) { pStack cursor=myStack; if(Stack_Empty()) { } else { while(cursor->next!=top) { cursor=cursor->next; } data=&(top->data); top=cursor; return data; } } //程序测试 int main(void) { int *data=NULL; myStack=makeStack(myStack,top); Push(myStack,3); Push(myStack,8); Push(myStack,19); Push(myStack,31); Push(myStack,43); Push(myStack,36); Pop(myStack,data); printf("%d ",data); } 

牧羊人nacy
浏览 135回答 1
1回答

胡子哥哥

你的地址值传递错误,按照我给你修改的试试看,一定要注意你的实参传递的是地址还是具体的值,如果是地址,在子函数中就不要去修改你传递进来的地址。intmain(void){intdata=0;//此处随机分配内存空间,不要用指针myStack=makeStack(myStack,top);Push(myStack,3);Push(myStack,8);Push(myStack,19);Push(myStack,31);Push(myStack,43);Push(myStack,36);Pop(myStack,&data);//此处,传递的是地址值printf("%d",data);}int*Pop(LinkedStackmyStack,int*data){pStackcursor=myStack;if(Stack_Empty()){}else{while(cursor->next!=top){cursor=cursor->next;}*data=top->data;//此处,只是在同一个内存空间修改其值,所以不要取地址top=cursor;returndata;}}
随时随地看视频慕课网APP
我要回答