2017-04-14 104 views
-3
#include<stdio.h> 
void func(); 

void func() 
{ 
int y; 
y=y+2; 
printf("%d",y); 
} 

int main() 
{ 
func(); 
func(); 
return 0; 
} 

为什么打印24时FUNC()被调用第二时间,y具有可变死?为什么它的行为像静态变量,即使它没有被声明?为什么默认情况下,varibale在c中声明为static?

+5

您的代码产生不确定的行为,编译器应该警告你。 –

回答

4

这是未定义行为因为未初始化的局部变量。

如果您使用自动存储变量前值已分配给它,该存储可容纳不管它以前举行,所以变量的内容将是不可预测的。

C标准是6.3.2.1 P2:

如果左值表示的是 可以被宣布使用寄存器存储类自动存储持续时间的对象(从未有过 其地址取),以及对象未初始化(未声明 与一个初始化和没有分配给它已被执行之前 使用),则该行为是未定义的。

所以,如果你初始化变量更好的只是创造后,像:

void func() 
{ 
int y = 0; 
     ^^^ 
y=y+2; 
printf("%d",y); 
} 
+0

谢谢!它的工作 –

+0

但默认情况下,它始终被初始化为零 –

0

该计划不确定的行为,因为使用该函数func内未初始化的变量y

void func() 
{ 
int y; 
^^^^^^ 
y=y+2; // using an uninitialized variable 
printf("%d",y); 
} 

至于问题,那么函数可以使用未被某些其他函数覆盖的相同内存。所以存储在内存中的值可以在函数调用之间相同。

相关问题