在以下程序中,ptr
指向未初始化变量x
。在打印ptr
之前,我已将10
分配给ptr
并打印出来。
#include <stdio.h>
int main()
{
int *ptr;
int x;
ptr = &x;
*ptr = 10;
printf(" x = %d\n", x);
printf(" *ptr = %d\n", *ptr);
}
ptr
和x
都会打印正确的值。但是,我怀疑,是否定义了行为?
答案 0 :(得分:13)
是的,确实如此。您将有效值分配给ptr
,然后使用间接将有效值分配给x
。
x
之类的变量的地址及其值是不同的东西。分配存储后,无论变量中的值如何,总是很好地定义地址。
答案 1 :(得分:2)
是的,因为当您声明x时,占位符/内存将变为可用 对你而言。
ptr = &x;
*ptr = 10;
代码有效意味着
x =10
答案 2 :(得分:1)
据我所知,它是定义的行为,因为在写入内容之前没有必要初始化内存。