关于C数组语法的问题

Questions about C array syntax

int array[] = {}

int array[length]

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

通过填写 {} 是否设置了数组中已有的值?

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

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

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

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

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

请务必注意,数组的大小和类型一旦声明就无法更改。

所以空数组其实没什么用

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

没有指定大小的数组,根据参数个数自动生成

如果未指定数组大小,则数组长度由初始化程序确定,如下所示:

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

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