关于c++不赋值int,字数字数字数

#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》:在函数体内的内置类型如果没有初始化其值将是未定义的。所以会依据环境与编译器不同出现不同的值。