C语言的一个指针问题

米兰的小铁匠z 2019-01-22 05:42:10
最经在学数据结构的栈,发现在指针方面有点问题,
比如说在链栈的出栈方式
我的链栈的定义是:
/*链栈的定义需要用到两个结构体*/
typedef struct StackNode{ //节点类型
int data;
StackNode* next;

}StrackNode;
typedef struct StackNode *LinkStackPtr;

typedef struct { //栈

LinkStackPtr top; //栈顶指针
int count;

}LinkStact;
然后我的入栈函数写成
/*入栈*/
void PushStack(LinkStact s,int e){
//LinkStackPtr p;
//p=s->top;
LinkStackPtr a =(StackNode*)malloc(sizeof(StackNode)); //新的节点
a->data = e;
a->next = s.top; //下面这两步和链表的插入相同
s.top =a;
s.count++;
}
发现这样写会进栈失败 --
只要把里面的参数改成LinkStact *s,指针形式就可以了??为什么会这样?希望有大佬可以帮忙解释一下,感激不尽
...全文
455 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
炸弹小黑裙 2019-02-04
  • 打赏
  • 举报
回复
如果传的是s用s.top就行,传*s就用s->top
  • 打赏
  • 举报
回复
嗯嗯 /*初始化一个空栈*/ int InitStack(LinkStact *s){ s->top = (StackNode *)malloc(sizeof(StackNode)); if(!s->top) return 0; s->top=NULL; s->count=0; return 1; } 我的初始化代码用的就是二级指针,但是感觉不是很好理解二级指针在这里面的用法
自信男孩 2019-01-23
  • 打赏
  • 举报
回复
从目前你提供的代码来看,不能说明改成二重指针就可以了,还要看你的栈初始化和申请空间的方式。因此,建议提供更多的代码。
  • 打赏
  • 举报
回复
感谢回复
独孤过 2019-01-22
  • 打赏
  • 举报
回复
理解形参和实参,传值和传地址的区别 形参即函数定义中的参数 实参即在函数调用时指定的参数 注意形参只是一个临时变量 以传值方式只是把实参的值复制至形参,在函数中的操作都是针对形参,未改变实参的值 而以传地址方式是用指针记录实参地址,在函数中,通过指针寻址,从而改变实参的值

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧