#include <iostream>
using namespace std;
int main(){
int a,b;
cout<<a<<endl;
int c=a+b;
cout<<c<<endl;
cout<<"a+b="<<a+b;
return 0;
}
如上代码中,定义a,b两个整型变量,但未赋值,进行加法运算最后结果为什么是22?
是内存随机给他俩赋值了吗?
这里说的随机,并不是数学上的随机的那个随机值。而是指因为编译器分配了空间,而没有刻意往里面初始化或者填0,从而原来是什么,就是什么值。
所以这个值每次运行可能都是一样的,但是放在不同编译器不同环境又是不同并且不能确定的。
之所以你看到22,这个可能是因为这个变量在堆栈上分配,它之前的函数调用的时候正好写在这里这么个值。虽然main是入口函数,但是实际上操作系统创建进程,到执行你的代码,还是调用了别的函数的,所以堆栈上有数据。
这是未指定的行为,有的编译器会自动赋为0 有些直接不管,换个编译器或者环境就会不一样,多次测试结果也可能不同。实际中严禁这么写。
随机值,写代码要有初始化的习惯
这里面的值是之前内存里的值,比如之前用过这块内存的变量值是22,那么这个变量不用后,这个内存的值还是存在里面的。内存是物理存在的,有没有变量它都存在,而变量只是
占用了内存的某个地址而已。
在你这个程序里面,你可以在打印一下b的值看一下
你把定义的变量初始化看看
这个是打印上次结果留在缓存里面的值,如果调用free()后就不一定打印什么了
依据《c++primer》:在函数体内的内置类型如果没有初始化其值将是未定义的。所以会依据环境与编译器不同出现不同的值。