C语言中有些变量可以不赋初值而有些不行为什么??

上图变量b不赋初值就不行,而下图变量x1不赋初值就可以正确执行?... 上图变量b不赋初值就不行,而下图变量x1不赋初值就可以正确执行? 展开
 我来答
kaixingui2012
推荐于2017-10-01 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6393万
展开全部
  • C语言中变量不赋初值是不能”使用“的。这个”使用“是指读取变量的内容。因为,未赋初的变量中存储的数据是个随机值,其值不确定。

  • 随机值的产生原因:变量都是存储在内存中的。程序运行以后,会在内存中给各个变量安置住处,这些地方以前可能有别的程序用过,里面留有上次使用后的结果数据,但系统不负责分配空间,不会清理内容,需要编程者自己清理。程序退出时也不清理内容,这就造成了后来者进到这个空间,看到一堆垃圾数据。

  • 一些编程者,没有”定义变量进行初始化“的编程习惯,或由于疏漏没有给变量赋初值,而直接去使用变量中的数据,这样就会出现随机现象:有的可以,有的不可以。原因就是内存数据刚是否符合调用者的条件造成的,符合的就可以,不符合的就出错。

  • 因此,养成”定义变量就初始化“的好习惯,在使用变量”进行运算“前,一定要注意检查变量是否已按自己的要求进行了赋值。

  • 另:C语言全局变量的初始化是系统自动完成的,编程者可以不用单独处理。

枫若神明
2013-09-23 · TA获得超过920个赞
知道小有建树答主
回答量:179
采纳率:0%
帮助的人:240万
展开全部
楼主我又来了。
其实不能说不赋初值就不行,对于局部变量,不赋初值的话,其实他里面存的是一个随机的值,谁也不知道他是多少,因此如果没赋初值的情况下就使用它,程序是完全不可控的,如你的图1,直接在while里去判断b了,因此这个while判断是不可控的。
但是图2里面,while(day>0),这个是一定成立的,所以对x1的第一次使用就是x1=2*(x2+1);相当于给他重新赋值了,这个时候x1的值已经固定了,再往下走就没有问题了。
建议:即使如图2所示最后结果是成功的,也不建议楼主这样写代码,记住局部变量一定要初始化,你可以int a=0;初始化,也可以int a; a=0;这样去初始化。
追问

呵呵,好快啊,虽然楼下的解释我听懂了,但是你很有耐心哦。非常感谢。选你妥妥的

追答
后续如果有问题,可以在百度知道里直接找我求助。
有问必答,妥妥的~~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
张简淑珍游汝
2019-12-04 · TA获得超过3.8万个赞
知道大有可为答主
回答量:1.2万
采纳率:29%
帮助的人:1189万
展开全部
图不行是因为b是作为判断条件的如果b没有赋初值可能会得到一个随机数,你可以把x1理解成一个容器,就会得到一个想不到的结果,而下图x1是一个普通变量它不是作为判断条件的,它等待往里面放东西
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-23
展开全部
图1中一开始定义b时没有赋值,b就是一个很大的数,故不会进入循环,直接输出b;而图二中开始定义x1也是没有赋值,x1也是一个很大的数,但是while的判断条件是day>0,会进入循环,循环中给x1赋值了 所以能输出正常计算值。
追问
兄弟,真的是谢谢你了,我会赞你个的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太叔竹青喜凰
2020-05-08 · TA获得超过3.6万个赞
知道小有建树答主
回答量:1.4万
采纳率:34%
帮助的人:884万
展开全部
图不行是因为b是作为判断条件的如果b没有赋初值可能会得到一个随机数,你可以把x1理解成一个容器,就会得到一个想不到的结果,而下图x1是一个普通变量它不是作为判断条件的,它等待往里面放东西
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式