未序列化的自动变量的值

Value of unintialized automatic variables

本文关键字:变量 序列化      更新时间:2023-10-16

我有这个代码:

int a,b;
int* aPtr = &a;
int* bPtr = &b;
std::cout << "a: " << *aPtr << std::endl;
std::cout << "b: " << *bPtr << std::endl;

当我不给a/b:赋值时

*aPtr的值是CCD_ 1&*bPtr的值是CCD_ 2。

为什么会这样?

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

与其他使用0初始化的语言不同,C++中没有整数的默认初始化值。在您的情况下,指针只指向某个内存位置,而值反映了该位置中的任何内容,这些内容可能会根据过多的因素而变化。

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

a19841258920包含在堆栈中。如果不为它们分配任何值,它们将只具有在为其分配/保留空间时堆栈中的值。这根本与指针有关。