c语言链表操作中循环语句既不执行也不跳出(while)

在C语言链表操作中遇到while循环只执行一次且无法跳出的问题,可能原因是当二级指针 pb 指向空时,条件表达式中的 pb->num 引发错误。解决方案是对条件语句进行调整,避免短路导致循环无法退出。注意此改动会影响后续代码,需要相应更新。对于指针和链表操作有疑问的读者,作者承诺会后续单独出文解答。
摘要由CSDN通过智能技术生成

 遇见这种问题建议检查一下指针指向的结构体是否为空,下面结合我的问题说明一下

该函数用二级指针headnode(因为void函数不返回值,此时要改变头节点的地址需要使用二级指针进行修改)接受了头节点的地址

一级指针p_new接受了新节点的地址(新节点地址不需要保存修改值返回函数体外,因此一级指针接受地址对节点的指针域进行操作即可)

源代码:

void link_insert(STU **headnode,STU *p_new){
    STU *pb=*headnode,*pf;
    if(*headnode==NULL){
        *headnode=p_new;
        return;
    }
    while ((p_new->num>pb->num)&&(pb!=NULL)) {      
        printf("laile\n");
        pb=pb->next;
        printf("laile\n");
    }
    printf("laile0\n");

 执行结果:

 

 可以看到,此次之行只执行了一遍while语句且没有跳出(打印了两遍"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值