2012-07-25 31 views
0

我是C語言的新手。但我可以理解爲什麼這個 下面的代碼給輸出爲'A'用C編寫的下列程序的輸出是什麼?

有一件令我困擾的事情是 printf語句中的數組名p。編譯器正在處理這個p?

p如何在第5行後用字符數組「%c \ n」替換

我知道這是一個愚蠢的問題,所以很抱歉張貼這個野兔。

任何人都可以幫助我理解這背後的概念嗎?

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

什麼是'p'前行。 5?第5行之後怎麼樣? – Useless 2012-07-25 10:30:33

回答

6

printf()的第一個參數是包含格式說明符的const char*。將其看作字符串文字更常見:

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

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

p[1] = 'c'分配改變dc在緩衝器p,導致字符A(如65A十進制值)被寫入到標準輸出(如%c指示printf()打印的字符,而不是%d將打印數字值)。

+0

,這要感謝很多先生。我怎樣才能加強我的C技能?有沒有任何鏈接可以幫助我深入理解C# – kTiwari 2012-07-25 10:56:10

+0

@krishnaChandra,沒問題。最好的方法是獲得推薦的書。這將是一個很好的起點:http://en.wikipedia.org/wiki/The_C_Programming_Language。 – hmjd 2012-07-25 11:00:12

2

您並未替換整個數組,只是數組偏移量爲#1(第二個字符)的字符。您將其替換爲'c',使內容爲「%c \ n」,當用作格式化字符串時,將整數65格式化爲大寫拉丁文A

+0

但它是否有效c語句使用arry名稱而不是在printf()函數中使用格式字符串 – kTiwari 2012-07-25 10:33:02

+0

當然是它,它是一個函數的參數,您可以自由地提供顯式字符串「像這樣一個」或者一個指向內存的指針這樣的字符串位於,像'p'。請記住,如果您使用的是字符數組,那麼它必須在其末尾用'''0'標記來結束 – YePhIcK 2012-07-25 10:34:13

0

說明下面:

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

上述執行後,P將包含 - > 「%d \ n」 個

line5:   p[1]='c'; 

在這裏,P現在將是 「%C \ n」 個,因爲您正在更改基於零的索引的第1個字符。

line6:   printf(p,65); 

這相當於:

printf("%c\n",65) 

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

因此你得到的輸出甲

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

輸出: A#ASCII值65

如果你給的值作爲66輸出將是「B」等