我输入了以下内容:
#include <stdio.h>
int main ()
{
int *ptr, x, y;
ptr = &x;
y = x;
printf("This is the value on location of x: %p\n", *ptr);
printf("This is the address of x: %p\n", &x);
printf("The value of x is *ptr is: %i %x\n", *ptr);
printf("This is the address of ptr: %p\n", &ptr);
printf("The value of y is: %i\n", y);
printf("The address of y is %p\n", &y);
return 0;
}
控制台显示以下内容:
这是x:000004F的地址 这是x:0028FF18的地址 x的值是* ptr是:79 28ff94
这是ptr:0028FF1C的地址 y的值是0028FF14
我可以理解所有printf结果,但第二个值28ff94
的第3行除外?
我知道%d79
的第一个值%x000004F
为*ptr = x
。
我明确没有指定第二个值,是空的。但现在我想知道十六进制值28ff94
来自何处?
答案 0 :(得分:3)
访问未初始化的变量会导致未定义的行为。可能是程序只是打印了以前在内存中的那个空间中的垃圾值。
由于C语言是一种干净而有效的语言,它不会自动填充值,它只是分配一定量的内存。此部分内存保留其先前的值,直到您将其初始化为其他内容。