使用char **,将char **初始化为C中的字符串数组

时间:2014-10-01 14:19:43

标签: c string pointers char initialization

char *c[] = { "str1", "str2", "str3", "str4" }; 
char **c = { "str1", "str2", "str3", "str4" }; 

第一行有效。第二个不是。为什么呢?

2 个答案:

答案 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" };