下面用C编写的程序的输出是什么?
我是C语言的新手,但我能理解为什么会这样 以下代码将输出为“A” 有一件事困扰着我,那就是数组中的数组名p printf语句。编译器如何处理这个p 第5行后面的字符数组“%c\n”如何替换p 我知道这是一个愚蠢的问题,所以很抱歉发布这个兔子 有人能帮我理解这背后的概念吗下面用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
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
(as65
是A
的十进制值)写入标准输出(as%c
sprintf()
打印字符,而不是打印数值的%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)“A”的代码>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;
}