关于C数组语法的问题


int array[] = {}
int array[length]

为什么我们不需要在第一个语法中加一个长度呢?

通过填写{},它是否设置了数组中已经存在的值?

如果未指定数组大小,则数组长度由初始值设定项确定,如下所示:

  • 如果数组是字符类型的,初始化器可以是字符串文字(根据"宽"字符类型的需要加前缀)-在这种情况下,数组的大小是根据文字的长度计算的,考虑到字符串终止符(请注意,空字符串不是空初始化器-它至少包含一个元素,即终止符本身)
  • 否则,数组将使用包含大括号的初始化程序列表进行初始化,数组大小计算如下:
    • 如果没有指定的[constant-expression] =initializer形式的初始值设定项,那么数组的大小是根据初始值设定项数计算的-声明
      int a[] = {1, 2, 3};
      将CCD_ 2定义为具有3个元素;
    • 如果有一个或多个指定的初始值设定项,则数组的大小是从最大的指示符*或*初始值设定项数(以较大者为准)计算得出的-声明
      int a[] = {[2] = 3};
      a定义为具有3个元素,并且仅初始化第三个元素(前两个隐式初始化为0)

数组必须具有非零大小,并且空的初始值设定项在语法上无效-初始值设定值列表中必须至少存在一个初始值设定器。

当一个数组有初始化器时,可以省略大小,在这种情况下,数组的大小就是初始化器的数量。例如:

int array[] = { 1, 2, 3 };

上面的数组包含3个元素,因为初始化器列表中有3个元素。

您提供的缺少大小空初始值设定项列表的特定语法无效,因为它将创建一个包含0个元素的数组。

在第一种情况下,您不必指定数组的大小,因为您将在{}中提供所需的元素。例如,如果你说:int array[]={1,2,3,4};这意味着数组的长度是4,您可以用整数填充表:1,2,3,4。在第二种情况下,您可以指定矩阵的大小。例如,如果说int array[10];这意味着您声明了一个int类型的数组,并且可以在矩阵中读取的整数的最大大小为10。

一个没有任何给定大小的数组,它是根据参数的数量自动生成的。

第一行分配一个空数组,使其长度为零,第二行分配可以容纳5个元素的数组。

需要注意的是,数组的大小和类型在声明后不能更改。

所以空数组实际上是无用的。

最新更新