为什么char初始化差异? C

时间:2014-02-07 17:30:36

标签: c initialization

为什么这两种初始化数组的方式彼此不同?

第一次初始化给了我一个编译器警告:

而第二个工作正常......

char *c_array_1[] = { {'a','b','c','d','e'}, {'f','g','h','i','j'} };

char *c_array_2[] = {"abcde","fghij"};

1 个答案:

答案 0 :(得分:4)

因此,在C语言中,字符串文字(如:"abcde")会自动在编译器的后台为它们分配存储空间。

所以,当你这样做时

char *c_array_2[] = {"abcde","fghij"};

编译器可以在某种程度上将其更改为:

char *c_array_2[] = {Some_Pointer, Some_Other_Pointer};

然而,对于另一个例子:

char *c_array_1[] = { {'a','b','c','d','e'}, {'f','g','h','i','j'} };

编译器将尝试初始化。这将导致这行代码转换为以下内容(并可能会发出一些警告):

char *c_array_1[] = {'a', 'f'};

然后这肯定不是你想要的('a'很可能不是一个有效的指针。你可以看到更多关于初始化发生的信息,如同这个问题:Why is this valid C