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

下面用C编写的程序的输出是什么?,c,C,我是C语言的新手,但我能理解为什么会这样 以下代码将输出为“A” 有一件事困扰着我,那就是数组中的数组名p printf语句。编译器如何处理这个p 第5行后面的字符数组“%c\n”如何替换p 我知道这是一个愚蠢的问题,所以很抱歉发布这个兔子 有人能帮我理解这背后的概念吗 line1: #include<stdio.h> line2: int main() line3: { line4: char p[]="%d\n"; lin

我是C语言的新手,但我能理解为什么会这样 以下代码将输出为“A”

有一件事困扰着我,那就是数组中的数组名p printf语句。编译器如何处理这个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;
             }
line1:#包括
第2行:int main()
第3行:{
第4行:字符p[]=%d\n;
第5行:p[1]='c';
第6行:printf(p,65);
第7行:返回0;
}

您没有替换整个数组,只替换数组偏移量#1(第二个字符)处的字符。将其替换为“c”,使内容成为“%c\n”,当用作格式字符串时,它将整数65格式化为大写拉丁字母a

printf()
的第一个参数是包含格式说明符的
const char*
。更常见的是将其视为字符串文字:

printf("%c\n", 65);
但使用包含字符串的变量是合法的

p[1]='c'
的赋值将缓冲区
p
中的
d
更改为
c
,导致字符
A
(as
65
A
的十进制值)写入标准输出(as
%c
s
printf()
打印字符,而不是打印数值的
%d

以下说明:

char p[]="%d\n";
执行上述操作后,p将包含->%d\n

在这里,p现在将是“%c\n”,因为您正在更改从零开始的索引的第1个字符

line6:          printf(p,65);
这相当于:

printf("%c\n",65)


因此,在第6行中得到A

的输出:
printf(p,65)
将更改为
printf(“%c\n”,65)Ascii值为65
#包括
int main()
{
字符p[]=%d\n;#存储在p[1]
p[1]='c'#d被c替换
printf(p,65)#p作为p[1]并被“%c\n”替换
返回0;
}
输出: A#ASCII值65


如果将值设为66,则输出将为“B”,依此类推。

第5行之前的
p
中是什么?第5行之后呢?但是在printf()函数中使用arry名称而不是使用格式字符串是否有效?当然,它是函数的参数,您可以自由地提供一个明确的字符串”,如下面所示或指向此类字符串所在内存的指针,如
p
。请记住,如果您使用的是一个字符数组,那么它必须以
'\0'
标记结尾,这非常重要。如何加强我的C语言技能?你有什么链接可以帮助我深入理解C语言吗way@krishnaChandra,没问题。最好的办法是得到一本推荐书。这将是一个很好的起点:。
printf("%c\n",65)
printf("%c\n",'A')
     #include<stdio.h>
       int main()
       {
          char p[]="%d\n";   #This is stored at p[1]
          p[1]='c'           # d is replaced by c
          printf(p,65);      # p is taken as p[1] and is replaced by "%c\n"
           return 0;
         }