char *c[] = { "str1", "str2", "str3", "str4" };
char **c = { "str1", "str2", "str3", "str4" };
第一行有效。第二个不是。为什么呢?
答案 0 :(得分:5)
第二行不是数组,因此您无法使用数组初始化语法
答案 1 :(得分:3)
第一行是初始化char*
数组的标准语法。
第二行简单无效,类型错误。
在coliru上直播:http://coliru.stacked-crooked.com/a/53464db7e2f31cfa
您可以使用复合文字保存(C99):
char **c = (char*[]){ "str1", "str2", "str3", "str4" };
请注意,如果在函数中定义,非常量复合文字将自动存储。
如果你想让它成为一个常量文字(因此在静态存储中),就像字符串(混淆地具有类型char[]
),那么这样做:
char **c = (char**)&*(const char* const []){ "str1", "str2", "str3", "str4" };