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

时间:2012-07-25 10:27:15

标签: c

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

困扰我的一件事是数组名称p printf statement.how这个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;
             }

5 个答案:

答案 0 :(得分:6)

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

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

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

分配p[1] = 'c'会将d更改为缓冲区c中的p,从而生成字符A(因为65是写入标准输出的A)的十进制值(因为%c指示printf()打印字符,而不是%d将打印数字值。

答案 1 :(得分:2)

您不是要替换整个数组,而是替换数组偏移#1(第二个字符)中的字符。你用&#39; c&#39;替换它。使内容成为&#34;%c \ n&#34;当用作格式化字符串时,将整数65格式化为大写拉丁语A

答案 2 :(得分:1)

第6行:printf(p,65);
将更改为
printf("%c\n",65); Ascii'A'的值为65.
http://www.asciitable.com/

答案 3 :(得分:0)

以下说明:

char p[]="%d\n";

在执行上述操作后,P将包含 - &gt; “%d \ n” 个

 line5:          p[1]='c';

这里,P现在将是“%c \ n”,因为您要更改基于零的索引的第1个字符。

line6:          printf(p,65);

这相当于:

printf("%c\n",65)

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

因此,您获得 A

的输出

答案 4 :(得分:0)

     #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;
         }

输出:               #ASCII值65

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