为什么使用sum时要初始化为0,一篇文章教你搞懂
1.sum在c语言中的作用
英文含义
sum 英文单词本身就是“总和、合计”的意思,程序员习惯用它命名存放累加结果的变量。核心作用
sum 是一个累加容器(累加器),专门用来不断收纳多个数值相加之后的合计结果。
每次执行 sum = sum + 新数值 (简写 sum += 新数值 ),就是把新的数字加到已经存好的总和上,再存回 sum。初始化规则:必须初始化为 0
在开始累加之前,一定要写 int sum = 0; 。
2.为啥要初始化为0?
1.C语言中,局部变量如果不手动赋值,里面是随机垃圾值;
2.如果不写 sum = 0 ,sum一开始是乱码数字,后续累加结果全部出错。
3.就像拿空盒子装东西:
sum = 0 相当于先把盒子清空;
如果不清空,盒子里原本有乱七八糟的东西,再往里放1、2、6……最后总数肯定不对。
图片:下图以没有初使化为例,程序无法运行
图片:下图则是成功例子
3.是不是只有sum要初始化为0,而其他变量不用?
这其实是许多新手的误区,不是别的变量不用初始化,而是它们的使用时机不一样;sum必须初始化为0,是因为它在计算语句里会读取自身旧值。
sum 变量在程序中会执行类似sum = sum + x;这样的累加语句。
1.这条代码执行时,计算机要先读取等号右边旧的sum值。如果 int sum; 没赋值,旧sum是内存里的随机垃圾值,计算直接出错。所以累加器sum,在第一次使用前必须手动给初始值0。
2.其他变量分两种情况
情况A:变量定义之后,立刻给它赋新值,没有先读取它本身,就可以不初始化(语法允许) 例子:
int a;
a = 10; // 直接给a写入10,全程没有读取a原来的值
情况B:只要变量在被赋值之前,要读取自身的值参与计算,就必须初始化,和是不是sum无关。比如累乘变量:
int ret;
ret = ret * 3; // 错误!这里要读取ret原来的值,ret是垃圾值
通俗总结
sum的代码逻辑:先读自己 → 参与计算 → 再写入新值,所以必须提前初始化;
有些变量:先写入新值 → 之后才读取使用,中间不会读到垃圾值,看起来“不用初始化”;
通用铁律(所有变量通用,不分名字):
如果变量在第一次赋值前,需要读取它本身的值做运算,就一定要初始化;
如果变量定义后,第一步就是给它赋值,没有读取旧值,就可以不提前初始化。
通过这篇文章希望大家了解到sum初始化的原因,由此进而延申其他变量也需初始化,不过需要分情况而定。
