用C编写的以下程序的输出是什么?

kTi*_*ari 0 c

我是C语言的新手.但我可以理解为什么以下代码将输出作为'A'.

困扰我的一件事是printf语句中的数组名称p.编译器正在处理这个p?

如何在第5行之后用字符数组"%c \n"替换p

我知道这是一个愚蠢的问题,很抱歉发布这个野兔.

任何人都可以帮助我理解这背后的概念吗?

 line1:      #include<stdio.h>
 line2:      int main()
 line3:      {
 line4:          char p[]="%d\n";
 line5:          p[1]='c';
 line6:          printf(p,65);
 line7:          return 0;
             }
Run Code Online (Sandbox Code Playgroud)

hmj*_*mjd 6

第一个参数printf()const char*包含格式说明符的.将它看作字符串文字更常见:

printf("%c\n", 65);
Run Code Online (Sandbox Code Playgroud)

但使用包含字符串的变量是合法的.

在缓冲区中p[1] = 'c'更改dto 的分配,导致将字符(作为十进制值)写入标准输出(作为打印字符的指示,而不是打印数字值).cpA65A%cprintf()%d