我对以下程序有疑问,我无法理解以下程序的输出:
#include<stdio.h>
#include<conio.h>
main()
{
char c='1';
clrscr();
printf("%d",&c);
getch();
}
在我的编译器中,它打印“-11”,并且我使用 Turbo C++。我知道如果我使用“c
”而不是“&c
”,它将打印 49,因为它是 ' 的 ASCII 数字1'。但是为什么当我使用“&c
”时它打印-11。
最佳答案
&c
表示c
的地址,而不是它的值,并且具有指针类型。使用 %d
作为指针有 undefined behaviour ,因此您的程序可以自由地打印它喜欢的任何内容(或者实际上做一些完全不同的事情)。
实际中可能发生的情况是指针被重新解释为整数,并且该整数恰好设置了其最高位。在 two's complement这代表一个负数,因此它是这样打印的。
关于c - 需要c编程方面的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23602261/