[英]What will be the output of the following program written in 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;
}
printf()
的第一個參數是const char*
,其中包含格式說明符。 更常見的是將其視為字符串文字:
printf("%c\n", 65);
但是使用包含字符串的變量是合法的。
的分配p[1] = 'c'
的改變d
,以c
在緩沖器p
,導致字符A
(如65
為十進制值A
)被寫入到標准輸出(作為%c
指示printf()
打印字符,而不是%d
將打印數字值)。
您不會替換整個數組,而只是替換數組偏移量為#1的字符(第二個字符)。 您將其替換為“ c”,使內容變為“%c \\ n”,當用作格式字符串時,將整數65格式化為大寫拉丁字母A
在第6行中:
printf(p,65);
將更改為
printf("%c\\n",65);
“ A”的Ascii值為65。
http://www.asciitable.com/
解釋如下:
char p[]="%d\n";
執行完上述操作后,P將包含->“%d \\ n”
line5: p[1]='c';
在這里,當您更改基於零的索引的第一個字符時,P現在將為“%c \\ n”。
line6: printf(p,65);
這等效於:
printf("%c\n",65)
要么
printf("%c\n",'A')
因此,您得到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;
}
輸出:A#ASCII值65
如果將值設置為66,則輸出將為“ B”,依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.