【发布时间】:2017-11-16 10:09:36
【问题描述】:
我熟悉 C 中的嵌套范围规则,其中嵌套块内的相同变量名称会隐藏具有相同名称的外部变量。 但是对于以下代码 sn-p 我无法确定输出的解释。
#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;
}
上面sn-p的输出是:
x = 1,y = 2,z = 3
x = 10,y = 20.000000,z = 3
x = 1,y = 20.000000,z = 2
谁能帮我理解第三个 printf 语句中 y 的值如何产生超出范围的变量值。
首先我认为它可能是垃圾值,因为使用%f 打印整数会导致垃圾值,因此将内部范围内的y 的值更改为其他值会导致与输出相同的值,因此我' m 确认它不是垃圾值。
我使用 gcc 版本 6.3.1 20161221 (Red Hat 6.3.1-1) (GCC) 编译程序,以及使用各种在线编译器编译程序。
【问题讨论】:
-
你知道为什么
z的值在第三个范围内没有更新为100吗? -
无法复制。
-
鉴于下面的答案,我认为可以肯定地说您遇到了复制粘贴错误...
-
您正在尝试使用 %f 打印整数。我相信编译器会抱怨的。但我也确信您一定禁用了警告。
-
@GauravPathak 不,我在发布问题时没有,但现在感谢 Paul Ogilvie 的回答,我知道了。