<分区>
我熟悉 C 中的嵌套作用域规则,其中嵌套 block 内的相同变量名称会遮盖具有相同名称的外部变量。 但是对于以下代码片段,我无法确定输出的解释。
#include <stdio.h>
int main()
{
int x = 1, y = 2, z = 3;
printf(" x = %d, y = %d, z = %d \n", x, y, z);
{
int x = 10;
float y = 20;
printf(" x = %d, y = %f, z = %d \n", x, y, z);
}
{
int z = 100;
printf(" x = %d, y = %f, z = %d \n", x, y, z);
}
return 0;
}
以上片段的输出是:
x = 1, y = 2, z = 3
x = 10, y = 20.000000, z = 3
x = 1, y = 20.000000, z = 2
谁能帮我理解第三个 printf 语句中 y
的值如何产生超出范围的变量值。
首先我认为它可能是垃圾值,因为使用 %f
打印整数会导致垃圾值,因此将内部范围内的 y
的值更改为其他值结果与输出值相同,因此我确认它不是垃圾值。
我已经使用 gcc version 6.3.1 20161221 (Red Hat 6.3.1-1) (GCC) 编译了程序,也使用了各种在线编译器编译了程序。