C++ 未初始化自动变量的值
我有以下代码:C++ 未初始化自动变量的值,c++,undefined-behavior,C++,Undefined Behavior,我有以下代码: int a,b; int* aPtr = &a; int* bPtr = &b; std::cout << "a: " << *aPtr << std::endl; std::cout << "b: " << *bPtr << std::endl; inta,b; int*aPtr=&a; int*bPtr=&b; std::couta和b包含在堆栈上。如果不为它们分配任何值,则它们将
int a,b;
int* aPtr = &a;
int* bPtr = &b;
std::cout << "a: " << *aPtr << std::endl;
std::cout << "b: " << *bPtr << std::endl;
inta,b;
int*aPtr=&a;
int*bPtr=&b;
std::couta
和b
包含在堆栈上。如果不为它们分配任何值,则它们将只具有在堆栈中分配/保留空间时的值。这与指针有关 如果没有为变量a和b赋值,则该变量是未定义的行为。您可以期望任何垃圾值作为结果。指针显示变量的地址,当您说int A
时,表示您正在为变量A
分配一些内存。因此,您需要初始化变量a
,否则它将导致未定义的行为。当您打印结果时,它将显示任何垃圾值指针是一种工具,它显示内存中变量的地址,而不是变量本身inta
表示您保留了一些内存(可以用以前程序中的其他内容填充)。因此,必须预先对(<代码)> A/<代码>初始化(给开始值)。< P>在C++中没有默认初始化值,不像其他用0初始化的语言。
本例中的指针只指向某个内存位置,而值反映了该位置中的任何内容,这些内容可能会根据过多的因素而变化。因为a
和b
都未初始化。您有未定义的行为。例如,Java没有本地变量的默认初始化。很多语言可能都是这样@ᴋᴇʏsᴇʀJava是一个完全不同的故事。在java中,所有变量都是引用,C++中不是这样的。必须初始化ValayLess只适用于C++中的(整型)类型。普通对象被(默认)构造。正式地说,你不能期望任何东西。实际上,您会得到一个垃圾值。