【发布时间】:2014-09-19 05:22:12
【问题描述】:
我正在检查范围规则问题,然后得到一个代码 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;
}
如果我将最后的打印更改为:
printf("x = %d, y = %d, z = %d \n", x, y, z);
我得到以下输出,但我不明白:(Ideone link)
x = 10, y = 0, z = 1077149696
那么,你能解释一下为什么 z 打印那个值吗?
【问题讨论】:
-
我的假设是因为
printf使用vargs,并期望%d作为float y,它读取float的前4个字节为0,并留下后4个字节到下一个%d即 z,因此 z 打印了一个未定义的值。 -
这段代码和ideone中的例子不一样
-
-1 此代码完全有效,与您从中获取结果的 ideone 中的代码不同。 ideone 代码有 bug。
-
“我想,如果最里面的印是这样的”——我想,如果我在头顶切一个洞并倒入酸液……会发生什么?跨度>
-
"此代码与 ideone 中的示例不同。" ——阅读理解?问题包含更改。 “这是你在 ideone 上的代码”——不,那是修改前的代码。
标签: c