菜菜小杨 2020-06-21 23:31 采纳率: 100%
浏览 72
已采纳

C语言指针传参的问题 !!求指教 !!(有关数据结构的)

为何在链表中 我初始化链表的返回值是是首节点的地址,然后通过别的函数再对该链表进行修改就可以修改成功。
而在栈中,我返回值也是栈的地址却修改失败?

typedef struct Link
{
int data;
struct Link*pNext;
}node,*pnode;//链表的节点结构
pnode init();//返回值是创建好的头节点地址
bool insert(pnode,,int);//对该链表进行插入操作
void traverse(pnode)//对链表进行遍历;
void main(){
pnode head=init();//假设已初始化完毕,并返回头节点地址
insert(head,1);
traverse(head);
//这些都可以实现
}

但是为何在栈中就无法实现呢 我不太懂,求大家指教一下,下面是链栈的相关的结构定义

typedef struct Node    //节点的定义
{
int data;
struct Node*Next;
}*pnode;//节点的定义
typedef struct Stack// 栈的定义 
{
pnode top;
}stack,*pstack;

pstack init();
void push(pstack,int);
void traverse(pstack);
pstack init()
{
stack s;
s.top=NULL;
return &s;

}
void mian(){
pstack t=init();
push(t,2);
//....相关的操作也完成不了  
}

应该是指针指向的问题 或者是对指针的地址进行修改的问题 但为何在链表结构就可以实现呢 实在不懂

  • 写回答

1条回答 默认 最新

  • qiu_shaofeng 2020-06-22 10:24
    关注

    pstack init()
    {
    stack s;
    s.top=NULL;
    return &s ; //试图返回局部变量地址。函数调用结束后,该地址指向一个不存在的对象。
    }
    修改为static stack s; 或者声明指针,malloc分配地址。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容