2 dr eammer DR_eamMer 于 2017.06.18 15:23 提问

关于c++不赋值int,字数字数字数
c++
#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?
是内存随机给他俩赋值了吗?
图片说明

7个回答

caozhy
caozhy   Ds   Rxr 2017.06.18 23:48
已采纳

这里说的随机,并不是数学上的随机的那个随机值。而是指因为编译器分配了空间,而没有刻意往里面初始化或者填0,从而原来是什么,就是什么值。
所以这个值每次运行可能都是一样的,但是放在不同编译器不同环境又是不同并且不能确定的。
之所以你看到22,这个可能是因为这个变量在堆栈上分配,它之前的函数调用的时候正好写在这里这么个值。虽然main是入口函数,但是实际上操作系统创建进程,到执行你的代码,还是调用了别的函数的,所以堆栈上有数据。

yjzh_td
yjzh_td   2017.06.20 18:00

这里面的值是之前内存里的值,比如之前用过这块内存的变量值是22,那么这个变量不用后,这个内存的值还是存在里面的。内存是物理存在的,有没有变量它都存在,而变量只是
占用了内存的某个地址而已。
在你这个程序里面,你可以在打印一下b的值看一下

YanXiaoGG
YanXiaoGG   2017.06.21 08:39

你把定义的变量初始化看看

caitilin_chen
caitilin_chen   2017.06.24 10:58

这个是打印上次结果留在缓存里面的值,如果调用free()后就不一定打印什么了

wu172
wu172   2017.06.25 13:21

依据《c++primer》:在函数体内的内置类型如果没有初始化其值将是未定义的。所以会依据环境与编译器不同出现不同的值。

s_listening
s_listening   2017.06.18 15:48

这是未指定的行为,有的编译器会自动赋为0 有些直接不管,换个编译器或者环境就会不一样,多次测试结果也可能不同。实际中严禁这么写。

DR_eamMer
DR_eamMer 回复战在春秋: 用的dev c++ 感觉这个编译器很渣
大约 2 个月之前 回复
s_listening
s_listening 回复战在春秋: 他用的大概是DEV mingw中的g++编译器 可能标准不严格吧
大约 2 个月之前 回复
fight_in_dl
fight_in_dl 未初始化的局部变量不能被使用,没报这个错吗?
2 个月之前 回复
fight_in_dl
fight_in_dl 很好奇是什么编译器,应该报错啊。
2 个月之前 回复
qq_36243846
qq_36243846   2017.06.18 23:40

随机值,写代码要有初始化的习惯

Csdn user default icon
上传中...
上传图片
插入图片