让我们看一下我无意中写的下面一段代码:
void test (){
for (int i = 1; i <=5; ++i){
float newNum;
newNum +=i;
cout << newNum << " ";
}
}
Run Code Online (Sandbox Code Playgroud)
现在,这就是我脑子里发生的事情:我一直认为浮动newNum会为每次迭代创建一个新变量newNum,因为该行被放入循环中.由于float newNum不会抛出编译错误,因此C++必须分配一些默认值(huhm,必须为0).然后我预计输出为"1 2 3 4 5".印刷的是"1 3 6 10 15".
请帮助我知道我的期望是什么,浮动newNum会为每次迭代创建一个新变量?
顺便说一句,在Java中,由于newNum没有初始化,这段代码将无法编译,这对我来说可能更好,因为我知道我需要将其设置为0以获得预期的输出.
由于newNum未明确初始化,因此它将具有随机值(由分配给它的内存块中包含的垃圾数据确定),至少在第一次迭代时.
在后续迭代中,它可能会重用其早期值(因为编译器可能会将其重复分配到相同的内存位置 - 这完全取决于编译器的判断).从输出来看,这就是实际发生的情况:在第一次迭代newNum中,值分别为0(纯粹偶然),然后分别为1,3,6和10.
因此,要获得所需的输出,请在循环内显式初始化变量:
float newNum = 0.0;
Run Code Online (Sandbox Code Playgroud)