为何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
相关产品推荐
相关产品推荐

