阵列初始化程序如{‘a’,’b’,’c’}返回?我的理解是,使用初始化器分配连续的内存块并将地址返回到第一个块.
以下代码不起作用:
char *char_ptr_1 = { 'a','b','c','\0' };
另一方面,这似乎工作正常:
char char_array[] = { 'a','\0' }; char *char_ptr_2 = char_array;
char_array将地址存储到第一个内存块,这解释了为什么我可以将char_array的值分配给chat_ptr_2. C会将初始化器返回的值转换为可以存储在指针中的值吗?
我在网上查了一下,发现了几个答案,它们讨论了数组和指针之间的区别,但是他们没有帮助我.
解决方法
初始化程序不返回任何本身.他们给编译器指示要放入被声明的项目的方向 – 在这种情况下,它们告诉编译器将要放入数组元素的内容.
这就是为什么你不能将一个初始化器分配给一个指针:一个数组初始化器需要与一个数组配对使编译器有意义.
指针可以用指针表达式初始化.这就是为什么你的初始化
char *char_ptr_2 = char_array;
声明工作:编译器将char_array转换为指针,并用它初始化char_ptr_2.