在c编程方面需要帮助

时间:2014-05-12 06:20:13

标签: 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。

4 个答案:

答案 0 :(得分:5)

&c表示c的地址,而不是其值,并且具有指针类型。使用%d作为指针有undefined behaviour,因此您的程序可以随意打印任何喜欢的内容(或者确实做一些完全不同的事情)。

在实践中可能发生的事情是指针被重新解释为整数,并且整数恰好设置了其顶部位。在two's complement中,这代表一个负数,因此它会被打印出来。

答案 1 :(得分:1)

printf行更改为:

printf("%c",c);

在您的代码中,%d正在打印带符号的十进制整数,而不是char值。但是,这里是未定义的,因为;

&cc的地址,而不是值。

您可以在http://www.cplusplus.com/reference/cstdio/printf/

上找到更多说明符

答案 2 :(得分:1)

您输出c的地址作为整数。

如果要将c的值作为整数输出,请使用printf("%d", c);;使用printf("%c", c);将其作为字符输出。

答案 3 :(得分:0)

因为&c是字符c的地址而不是它的值。如果要查看其值,请不要将&放在那里。在Turbo C中将地址打印为整数是完全有效的,但是Decent编译器会警告你:

  

警告:格式'%d'需要类型为'int'的参数,但参数2的类型为'char *'