为什么这两种初始化数组的方式彼此不同?
第一次初始化给了我一个编译器警告:
而第二个工作正常......
char *c_array_1[] = { {'a','b','c','d','e'}, {'f','g','h','i','j'} };
char *c_array_2[] = {"abcde","fghij"};
答案 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