huchiyv 2022-12-01 16:33 采纳率: 42.9%
浏览 21

函数调用中的结构体使用出现值不等

问题遇到的现象和发生背景

使用C语言实现链栈,然后想要遍历一遍栈里面的内容

//这是栈的结构
typedef struct snode {
    AddressTyrpe data;//存的是入栈元素的地址
    struct snode* pNext;
    struct snode* pPrio;
}SNODE;

typedef struct stack {//带头结点的链表做栈
    SNODE head;
    SNODE* top;
}STACK;
//方式一(报错的):
void InitStack(STACK* S) {//初始化
    S->head.pPrio = NULL;
    S->head.pNext = NULL;
    S->top = &S->head;
}
bool StackEmpty(STACK S) {//判空
    if (S.top ==S.head && S.head.pNext==NULL && S.head.pPrio==NULL) {
        printf("空栈\n");
        return true;
    }
    else {
        return false;
    }
}
void Traverse(STACK S) {//遍历
    if (StackEmpty(*S)) {
        return ;
    }
    else {
        //SNODE* p = S->top;
        while (S.top != &(S.head)) {
//在这里报错,当明明s.top应该等于s.head了但是debug显示不相等,然后继续进去head的data未初始化就报错了
            printf("%d ", *(S.top.data));
            S.top  = S.top .pPrio;
        }
        printf("\n");
    }
}
//方式二(后来改出来正确的):
void InitStack(STACK* S) {
    S->head.pPrio = NULL;
    S->head.pNext = NULL;
    S->top = &S->head;
}
bool StackEmpty(STACK S) {
    if (S.head.pNext==NULL && S.head.pPrio==NULL) {
        printf("空栈\n");
        return true;
    }
    else {
        return false;
    }
}
void Traverse(STACK* S) {//主要改了传参方式然后就正确了
    if (StackEmpty(*S)) {
        return ;
    }
    else {
        SNODE* p = S->top;
        while (p != &(S->head)) {
            printf("%d ", *(p->data));
            p = p->pPrio;
        }
        printf("\n");
    }
}
我的问题:

方式一这个地方传入S是main函数的复制品为什么top到头时候就不会和head相等,而使用方式二传入参数是&S也就是S的地址的时候相等又可以了,有人可以解惑一下吗?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-12-01 18:10
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 12月1日

悬赏问题

  • ¥30 silcavo仿真,30分钟,只需要代码
  • ¥15 FastReport 怎么实现打印后马上关闭打印预览窗口
  • ¥15 利用3支股票数据估计其均值和方差的95%置信区间。
  • ¥15 微信小程序运行一项功能时,弹出未知错误弹框,检查代码没有问题
  • ¥15 ATAC测序生成self-pseudo replicates之前是否要进行去线粒体reads
  • ¥15 python模糊字匹配函数问题
  • ¥20 谁刷目标页面的uv记录器上数据,数据只记录跳转的数值
  • ¥30 数据库软件的安装方法
  • ¥15 一道以太网数据传输题
  • ¥15 python 下载群辉文件