关于函数中变量定义的问题

时间:2010-04-01 20:06:08

标签: c variables integer for-loop definition

包括

main()
{
    int a;
    for(a=1; a<=4 && printf("%d ",a); a++)
    {
       int a;
       static int b=a;
       printf("%d ",(a++)-b);
    }  
    getchar();
    getchar(); 
}  

在此代码中,打印输出为1 0 2 1 3 2 4 3.我理解为什么int a; part的工作方式不同于在for函数外定义的int a,以及为什么static int b;仅使用a的主值定义一次;但为什么printf中的(a ++)部分会影响a的进行值?我们不要重新定义一个;每次for函数运行?提前致谢。

3 个答案:

答案 0 :(得分:4)

内部a未定义,因此,编译器可以使用它喜欢的任何值。它喜欢的值显然是字节“a”的当前值占用。第二次通过循环,你会得到一个全新的内部 - 一个巧合恰好位于与前一个内部A相同的位置,并假设它的价值。

但这只是巧合 - 如果以其他方式更容易做到,编译器会(并且在法律上可以)。

另请注意,在第二个a ++之后永远不会读取a的值。很可能如果你打开优化,编译器将决定它不需要做那个增量,并且a的内部值总是为零。

答案 1 :(得分:3)

内部'a'变量未初始化,因此每次循环时它的值在技术上都是未定义的。

答案 2 :(得分:3)

您没有为内部a指定值,因此结果未定义。

即使您更改代码以将内容分配给a,您的代码也应该无法编译,因为您尝试将变量分配给此行上的本地静态:

static int b=a;

编译器输出:

test.c: In function `main':
test.c:9: error: initializer element is not constant