变量不初始化,在代码中其实很常见,当然原因各种各样。可能写代码的时候不知道该初始化为什么值,放着放着就忘记了;或者在自己完成时,这个变量在各个分支都已经先初始化给值了,但后续的人修改这部分代码时并没有注意以为已经初始化了;或者有些人会以为不初始化就是默认为0,然后不同的编译器对没有初始化的变量默认值是不相同的;或者只是因为懒。。。
反正对于初始化这件事上,我吃了不少亏的。有前辈们留下的疑难问题,定位了老半天才发现原来是一个小小的没有初始化的问。也有自己埋下的雷,再几个月后爆发,加班到凌晨解决。今天只说一个初始化的问题,关于for循环的里面使用变量的初始化,如下代码
main()
{
int A = 0;
int i;
int printflag = 1;
int arrary[10] = {1,1,2,2,3,3,3,4,4,4}
for(i = 0; i < 10; i++)
{
if(1 == array[i])
{
printflag = 0;
}
if(1 == printflag)
{
printf("Hello i:%d", i);
}
}
}
功能做了简化,不要问我这么简单的功能为什么不用更简洁的方式,只是敲代码太累省略其中复杂的地方,代码必须这么实现。
大致就是数组中,如果满足某个条件就不打印。
看起来没有毛病呀,可为何死活没有打印,该初始化的都初始化了呀,为什么还是不行。再仔细思考一下是否看出问题所在了?
初始化时初始化了,但我们是要数组中某个元素满足条件不打印,不满足条件是要打印的!!
printflag一旦给0了,后面管你满不满足条件,后续就不打印了。printflag这个值是要在for循环每次的循环都要初始化的!!
要改为
main()
{
int A = 0;
int i;
int printflag = 1;
int arrary[10] = {1,1,2,2,3,3,3,4,4,4}
for(i = 0; i < 10; i++)
{
printflag = 1;
if(1 == array[i])
{
printflag = 0;
}
if(1 == printflag)
{
printf("Hello i:%d", i);
}
}
}
小问题大毛病,记得做单元测试!!单元测试就能查出来的bug,幸好没有引起大事故,不然无颜面对。