在c编程方面需要帮助

p01*_*ath -3 c printf

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

#include<stdio.h>
#include<conio.h>
main()
{
    char c='1';
    clrscr();
    printf("%d",&c);
    getch();
}
Run Code Online (Sandbox Code Playgroud)

在我的编译器中,它打印"-11",我正在使用Turbo C++.我知道,如果我使用" c"而不是" &c"它将打印49因为它是一个ASCII数字'1'.但它为什么打印 - 11当我使用" &c"时.

NPE*_*NPE 5

&c表示地址c,而不是其值,并具有指针类型.使用%d了指针不确定的行为,所以你的程序是免费打印为所欲为(或实际上做完全不同的事情,而不是).

在实践中可能发生的是指针被重新解释为整数,并且整数恰好设置其顶部位.在二进制补码中,这表示负数,因此它将被打印出来.