阵列初始化程序返回什么?

Iza*_*aan 10 c arrays pointers

数组初始化者如{ 'a', 'b', 'c' }返回什么?我的理解是使用初始化器分配连续的内存块并将地址返回到第一个块.

以下代码不起作用:

char *char_ptr_1 = { 'a', 'b', 'c', '\0' };
Run Code Online (Sandbox Code Playgroud)

另一方面,这似乎工作正常:

char char_array[] = { 'a', 'b', 'c', '\0' };
char *char_ptr_2 = char_array;
Run Code Online (Sandbox Code Playgroud)

char_array存储地址的第一存储器块这就解释了为什么我能够分配的价值char_arraychat_ptr_2.C是否将初始化器返回的值转换为可以存储在指针中的值?

我确实在网上找了几个答案,谈到了数组和指针之间的区别,但它们对我没有帮助.

das*_*ght 14

初始化程序本身不返回任何内容.它们为编译器提供了关于要声明的项目的内容的指示 - 在这种情况下,它们告诉编译器将什么放入数组的元素中.

这就是为什么你不能为指针分配初始化器的原因:数组初始化器需要与数组配对才能使编译器有意义.

可以使用指针表达式初始化指针.这就是为什么你的初始化

char *char_ptr_2 = char_array;
Run Code Online (Sandbox Code Playgroud)

声明有效:编译器转换char_array为指针,并char_ptr_2使用它进行初始化.


thu*_*eys 6

它被称为数组初始化程序,因为它初始化数组而不是指针.

它只是C语法,为什么不允许指针选项.