2015-04-06 67 views
1

我嘗試使用這四個符號來代表的陣列,爲了測試他們充分理解他們:如何在C中的這四種情況下分別在字符串數組中打印出字符串?

char juices_A[][12] 
char *juices_B[] 
char (*juices_C)[][12] 
char **juices_D 

所以我寫這篇文章的代碼:

#include <stdio.h> 

int main() { 

    int i_A = 0; 
    char juices_A[][12] = { "dragonfruit", "waterberry", "sharonfruit", }; 
    for (; i_A < 3; i_A++) 
     printf("%s;", juices_A[i_A]); 
    puts(""); 

    int i_B=0; 
    char *juices_B[] = { "dragonfruit", "waterberry", "sharonfruit", }; 
    for (; i_B < 3; i_B++) 
     printf("%s;", juices_B[i_B]); 
    puts(""); 

    int i_C=0; 
    char (*juices_C)[][12] = { "dragonfruit", "waterberry", "sharonfruit", }; 
    for (; i_C < 3; i_C++) 
     printf("%s;", (*juices_C)[i_C]); 
    puts(""); 

    int i_D=0; 
    char **juices_D = { "dragonfruit", "waterberry", "sharonfruit", }; 
    for (; i_D < 3; i_D++) 
     printf("%s;", juices_D[i_D]); 
    puts(""); 

    return 0; 
} 

當我嘗試運行代碼,它顯示:

dragonfruit;waterberry;sharonfruit; 
dragonfruit;waterberry;sharonfruit; 
dragonfruit;waterberry;haronfruit; 

顯然第三和第四種情況有一些問題,我想爲什麼。此外,我可以使用類似*juice++*juice--

+0

提示:檢查數據類型。 – 2015-04-06 11:34:32

回答

2
int i_C=0; 
char (*juices_C)[12] = (char [][12]){ "dragonfruit", "waterberry", "sharonfruit", }; 
for (; i_C < 3; i_C++) 
    printf("%s;", juices_C[i_C]); 
puts(""); 

int i_D=0; 
char **juices_D = (char *[]){ "dragonfruit", "waterberry", "sharonfruit", }; 
for (; i_D < 3; i_D++) 
    printf("%s;", juices_D[i_D]); 
puts(""); 
+0

這是不可思議的,前綴是什麼意思,爲什麼需要前綴? – 2015-04-06 11:45:54

+1

@LeeWilliam您的第三和第四個樣本不適合作爲初始值設定項。這就是所謂的「複合文字」。這種情況創建了一個臨時數組。 – BLUEPIXY 2015-04-06 11:55:56

+0

如果我想知道更多關於初始化和複合文字的知識,您是否有一些很好的參考資料/文章? – 2015-04-06 12:04:54

相關問題