2015-05-14 226 views

回答

4

STR [2]是陣列str的第三元件。它又是一個字符數組,其類型爲char[3]。在這樣的函數調用中

printf("%s", str[2]); 

該數組被轉換爲指向其第一個字符(元素)的指針。陣列str[2]的第一個字符可以像str[2][0]那樣獲得。所以它的地址確定爲&str[2][0]

因此,表達式str[2]&str[2][0]是等同的。

至於這個調用

printf("\n%s\n%s",str[2],&str[0]); 

那麼它是無效的。格式說明符%s預計類型爲char *的參數,而表達式&str[0]的類型爲char **。但是因爲在任何情況下,表達式&str[0]的值都是數組str[0]的第一個元素的地址,該函數會生成正確的結果。

如果你想爲str[2][0]爲單個字符,則使用格式說明符%到輸出中只有一個字符,而不是必須使用的格式說明%c例如

printf("\n%c\n%s",str[2][0],&str[0][0]); 
      ^^^ 

在這個函數調用的字符串c的輸出。

+0

爲什麼我們不能簡單地使用str打印[2] [0] ??? –

+1

@Abhishek Sharma我們可以打印符號str [2] [0],但因爲它有char類型(它是一個字符),我們必須使用格式說明符%c而不是%s,因爲格式說明符%s需要一個指向字符的指針的單個字符 –

+0

感謝您的回覆..我是一個初學者編程。是的,你是ri8。 –