2015-04-06 64 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

相关问题