我是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;
}
答案 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”,依此类推。