【发布时间】:2019-08-31 19:08:31
【问题描述】:
您好,我正在学习 C 中的指针,想知道下面的代码是做什么的?
指针*abc 是否只是指向一些随机的东西,因为它没有正确分配变量的地址?
void func()
{
int *abc;
*abc = 5;
}
【问题讨论】:
-
代码在运行时将简单地调用未定义的行为。
-
这是未定义的行为,因为您在为
abc分配指针值之前就对其进行了分配。 -
是的。它指向一些随机的东西。如果它恰好指向有效内存,您将覆盖其他内容。如果不是,您将遇到分段错误并且程序将崩溃。
-
在一个指针被初始化为指向一个有效的内存位置之前,该指针是一个“未初始化的指针”,它持有一些不确定的地址作为它的值。当您为指针分配一个有效地址时,您初始化指针以指向该有效地址(指针只是一个普通变量,它将内存地址作为其值保存到其他东西,即指针指向该地址)。所以在你的情况下,如果你有
int i = 5, *abc = &i;,你初始化abc(让它指向)到内存中存储5的地址。