未初始化的自动变量的值

时间:2013-11-30 19:34:27

标签: c++ undefined-behavior

我有这段代码:

int a,b;

int* aPtr = &a;

int* bPtr = &b;

std::cout << "a: " << *aPtr << std::endl;
std::cout << "b: " << *bPtr << std::endl;

当我没有为a / b分配值时:

* aPtr的值是1984125892&amp; * bPtr的值为4285552

为什么会这样?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

指针是一种工具,用于显示内存中变量的地址,而不是变量本身。 int a表示您保留了一些内存(可以使用以前程序中的其他内容填充)。因此,您必须事先初始化(给出一个开始值)到a

答案 2 :(得分:0)

与其他初始化为0的语言不同,C ++中的整数没有默认初始化值。 你的案例中的指针只指向一些内存位置,值反映了该位置的任何内容,这可能会因多种因素而发生变化。

答案 3 :(得分:-1)

堆栈中包含

ab。如果您没有为它们分配任何值,它们将只具有堆栈中的值,因为它们的空间已分配/保留。这与指针有关。