这里我有代码
#include <stdio.h>
void what_in_variable1(void);
void what_in_variable2(void);
void what_in_variable3(void);
int main(void)
{
what_in_variable1();
what_in_variable2();
what_in_variable3();
return 0;
}
void what_in_variable1(void)
{
int a;
int b;
int c;
printf("a znachenie %d\n", a);
printf("b znachenie %d\n", b);
printf("c znachenie %d\n", c);
}
void what_in_variable2(void)
{
int d;
int e;
int f;
printf("d znachenie %d\n", d);
printf("e znachenie %d\n", e);
printf("f znachenie %d\n", f);
}
void what_in_variable3(void)
{
int q;
int o;
int p;
printf("q znachenie %d\n", q);
printf("o znachenie %d\n", o);
printf("p znachenie %d\n", p);
}
代码返回消息
a znachenie 0
b znachenie -134327328
c znachenie 32767
d znachenie 0
e znachenie -134327328
f znachenie 32767
q znachenie 0
o znachenie -134327328
p znachenie 32767
显然,这不是分配为变量之前内存中的数据,否则所有数字都会不同。出于同样的原因,这些不能是分配给变量的存储单元的地址。在这种情况下,函数中声明的最后一个变量始终等于32767
,在其之前声明的变量始终等于-134327328
,其前面的变量始终等于0
。也就是说,如果他只是宣布的话a
,那就b
已经a
是-134327328
并且b
本来就是32767
。
或者代码是否经过编译,以便在人工赋值之前总是为变量分配一些默认值,具体取决于变量声明的顺序?
如果是这样,是否有可能以某种方式编写一个代码,在人们赋值之前不会为变量分配默认值,但能够看到最初存在的内容?也许另一个程序之前曾使用过这个存储单元,并在那里留下了一些有趣的数据——cookies、密码等。