You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何void函数无法修改bool变量值?程序死循环求解

问题原因

你遇到的死循环是因为C语言函数参数默认是值传递:
调用test(check)时,main函数里的check值会被复制一份,作为test函数的局部变量使用。test里修改的只是这个副本,main中的原check变量完全不受影响,所以main的while(check)循环会一直判断为true,陷入死循环。

解决方法

有两种常用的修复方式:

方法一:使用指针传递(直接修改原变量)

修改test函数的参数为指针类型,让函数直接操作main里的check变量地址:

修改后的header.c代码:

#include <stdbool.h>
void test(bool *check)
{
    while (true)
    {
        if(*check){
            *check = false;
            break;
        }
    }
}

main.c的调用修改:

把test(check);改成test(&check);,同时要确保header.h里的函数声明对应修改为:

void test(bool *check);

方法二:让函数返回修改后的值,在main中更新变量

让test函数返回修改后的bool值,main函数接收返回值来更新自身的check:

修改后的header.c代码:

#include <stdbool.h>
bool test(bool check)
{
    while (true)
    {
        if(check){
            check = false;
            break;
        }
    }
    return check;
}

main.c的调用修改:

把test(check);改成check = test(check);,header.h里的函数声明对应修改为:

bool test(bool check);

内容的提问来源于stack exchange,提问作者hu xiuleiwe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:40:26