Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未初始化自动变量的值_C++_Undefined Behavior - Fatal编程技术网

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::cout
a
b
包含在堆栈上。如果不为它们分配任何值,则它们将只具有在堆栈中分配/保留空间时的值。这与指针有关

如果没有为变量
a和b赋值,则该变量是未定义的行为。您可以期望任何垃圾值作为结果。指针显示变量的地址,当您说
int A
时,表示您正在为变量
A
分配一些内存。因此,您需要初始化变量
a
,否则它将导致未定义的行为。当您打印结果时,它将显示任何垃圾值

指针是一种工具,它显示内存中变量的地址,而不是变量本身
inta
表示您保留了一些内存(可以用以前程序中的其他内容填充)。因此,必须预先对(<代码)> A/<代码>初始化(给开始值)。

< P>在C++中没有默认初始化值,不像其他用0初始化的语言。
本例中的指针只指向某个内存位置,而值反映了该位置中的任何内容,这些内容可能会根据过多的因素而变化。

因为
a
b
都未初始化。您有未定义的行为。例如,Java没有本地变量的默认初始化。很多语言可能都是这样@ᴋᴇʏsᴇʀJava是一个完全不同的故事。在java中,所有变量都是引用,C++中不是这样的。必须初始化ValayLess只适用于C++中的(整型)类型。普通对象被(默认)构造。正式地说,你不能期望任何东西。实际上,您会得到一个垃圾值。