1

我就是不明白。Char 是一个整数,对吧?所以我可以

int var;
scanf("%d", &var);
I:[65]
printf("%c", var);
o:[A].

那么为什么要这样做:

char var;
scanf("%d", &var);
I:[A]
printf("%d", var)
O:[-1236778]
4

1 回答 1

1

在第二scanf()

scanf("%d", &var);

scanf()解析的打印指令%d。这意味着该参数 &var应为 的地址int。而是char给出了 a 的地址。a的大小int肯定大于 a 的大小char。由于scanf()尝试将int大小数量放入仅用于“字符”的位置,因此 scanf() 可能会发生奇怪的事情,可能会将数据放置在不应该放置的位置。试图将 10 磅 pf 土豆放入 5 磅的袋子中。

scanf("%d", &var);此外 -成功读取输入“A” 似乎值得怀疑。scanf()会看到A,并且由于它不是数字,因此会放弃扫描符合int定义的文本输入。因此,您可能返回scanf("%d", &var)一个值,0因此没有在. 保存你的培根,因为如果它这样做了,它会将数据放置在它不应该放置的空间中。var

然后最后printf("%d", var)只是简单地打印出var从未设置过的内容,因此您可以得到任何发生在 char 中的内容。 -1236778似乎不太可能。我怀疑该帖子与代码或输入/输出不匹配。

于 2013-07-14T23:47:05.970 回答