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

时间:2014-04-24 12:30:51

标签: c arrays pointers

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

以下代码无效:

char *char_ptr_1 = { 'a', 'b', 'c', '\0' };

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

char char_array[] = { 'a', 'b', 'c', '\0' };
char *char_ptr_2 = char_array;

char_array将地址存储到第一个内存块,这解释了为什么我能够将char_array的值分配给chat_ptr_2。 C是否将初始化器返回的值转换为可以存储在指针中的值?

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

4 个答案:

答案 0 :(得分:14)

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

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

可以使用指针表达式初始化指针。这就是你

中初始化的原因
char *char_ptr_2 = char_array;

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

它们是数组初始值设定项,而不是具有值的普通表达式。例如,阵列初始化器只能 用于初始化阵列。它是特定用途的特殊语法,故事的结尾。

答案 3 :(得分:4)

它并没有真正"返回"任何事情,它解析编译时间并创建一个数组。指针需要指向某个东西,你不能为它指定一个直接值。所以你首先需要数组,然后你的指针可以指向它。