Qt的C++类的变量初始化
问题描述:
平台
OS - >的ubuntu 15.10 64 IDE - > Qt创建者 CXX - >铛64Qt的C++类的变量初始化
未初始化的变量 “ABCDEFGH”,但乳宁“求时“价值总是零;为什么?
代码
enter code here
#include <iostream>
#include <stdio.h>
using namespace std;
class A {
public:
A() {}
void show() {
int e;
int f;
int g;
int h;
printf("value show a = 0x%08X , b = 0x%08X , c = 0x%08X , d = 0x%08X\n", a, b, c, d);
printf("value show e = 0x%08X , f = 0x%08X , g = 0x%08X , h = 0x%08X\n", e, f, g, h);
printf("mapid show e = 0x%08X , f = 0x%08X , g = 0x%08X , h = 0x%08X\n", &e, &f, &g, &h);
}
private:
int a;
int b;
int c;
int d;
};
int main()
{
A aaa;
aaa.show();
int a;
printf("0x%08x\n", a);
while(1);
return 0;
}
答
您正在使用未初始化的变量。您在变量中找到的“随机垃圾”取决于堆栈中的数据。并且堆栈中的数据或多或少是随机的。
你发现一些变量是零,因为堆栈在这个地方是零。原因,为什么堆栈为零,可以是随机的,但也可以取决于你的程序。
每个函数调用都会操纵堆栈,所以它可能会发生,有些零被“遗留”了一些以前调用过的函数。 如果您认为您的程序没有以前调用过的功能,那么您最好检查一下机器码。有很多事情发生,你不希望它...
你可以阅读更多关于堆和堆栈here,或只是在网上搜索它。对于这样的问题,你应该真的看看机器代码;)
为什么不呢? “未初始化”并不意味着“不是零的东西”。并且使用未初始化变量的值是未定义的。 – molbdnilo
但在我的运行环境中,变量“b e g”是确定的并始终为零;我跑了很多次。你可以试试 ! –
我想你期望看到一些可以识别为“随机垃圾”的东西,但“未初始化”也并不意味着“在随后的执行中不一样”,并且0也不比2384373更不确定.C++规定不是对使用未初始化变量的程序的要求。你的程序也可以为任何事情打印0;变量仍然是未初始化的,它们的值仍然是不确定的,程序仍然是未定义的。 – molbdnilo