c - 需要c编程方面的帮助

标签 c printf

我对以下程序有疑问,我无法理解以下程序的输出:

#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/

相关文章:

java - C/C++函数/方法与Java的比较

c - 刷新 linux OS 串行缓冲区

c - 打印大写字母的十六进制

c - 像 cout 一样,在 printf 处自动定位数字大约为 double

c - C中循环单链表的优雅实现?

c - 如何比较c中的字符

c - libev ev_io_stop() 不关闭套接字

java - 线程 "main"java.util.IllegalFormatConversionException 中出现异常

c - 格式 ‘%d’ 需要类型为 ‘int’ 的参数,但参数 2 的类型为 ‘int *’

c - 每次调用 printf() 是否创建一个新的内部缓冲区,或者所有后续调用都使用与第一个相同的缓冲区?