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

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分配地址。

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题