使用{}进行数组初始化的未指定维度

Dex*_*mat 3 c arrays initialization

我想知道是否:

int a[] = {1, 2};

分配sizeof(int)*括号内的常量数

int a[5] = {1, 2};

将常量分配给0到1的数组字段,然后填充0

int a[5] = {};

填0

当我这样做时会发生什么:

int a[] = {};

谢谢.

oua*_*uah 6

int a[5] = {};
Run Code Online (Sandbox Code Playgroud)

 int a[] = {};
Run Code Online (Sandbox Code Playgroud)

不是有效的C定义.

在GNU C(带有gcc扩展名的C)中,您可以使用empty {},它被认为是相同的{0}.

请注意,这int []是一种不完整的类型 当使用显式初始化器初始化不完整类型的数组时,类型完成,然后数组的元素数是括号初始化列表中的元素数.

因此int a[] = {0};,在C中定义一个1元素的数组,在GNU C int a[] = {};中也是如此.

  • @Deximat,它是无效的,因为标准不允许空的初始化器,就这么简单. (2认同)