为什么以下程序给出输出:A

时间:2012-09-19 02:20:08

标签: c arrays pointers printf

为什么以下程序给出输出:A。

格式说明符\n之后%d的用途是什么? 我在Linux,Windows和ideone上尝试过它。

#include <stdio.h>
int main(void)
{
    char p[]="%d\n";
    p[1]='c';
    printf(p,65);
    return 0;
}

5 个答案:

答案 0 :(得分:3)

首先,您的程序修改格式字符串:它变为“%c \ n”。然后它打印65,它被重新解释为ASCII码,这是一个大写的A

这与

相同
printf("%c\n", 65);

甚至

printf("%c\n", 'A');

因为char值在传递给int等变量函数时会转换为printf

答案 1 :(得分:2)

ASCII字符编码。 A是65. http://www.asciitable.com/

您正在将输出格式说明符从%d - 整数更改为%c - 字符

答案 2 :(得分:2)

%c表示char

65是'A'的ASCII码。

答案 3 :(得分:2)

让我们遵循执行流程和变量的状态。最初,您要设置字符串p =“%d \ n”。 '%d'告诉printf在'%d'的位置打印一个整数,它将在字符串参数之后传递给printf。然后你设置p [1] ='c'。将p更改为“%c \ n”,因为数组从0开始编制索引,因此在引用1位置时更改第二个字符。他们用p和65调用printf,这使调用看起来像这样:'printf(“%c \ n”,65)'。 %c告诉printf函数将%c替换为作为第二个参数传递的字符。在C中,字符在ASCII表中表示为整数(可在此处找到:http://www.asciitable.com/)。恰好65是'A'的代码,所以打印后跟换行符的'A'。我希望这有用!

答案 4 :(得分:1)

使用格式字符串"%c"指定printf应打印字符。 65 是字符“A”的ASCII值。

您可以在wikipedia page上找到有关ASCII的更多信息,包括字符值表。