首页 > 解决方案 > 关于 C 数组语法的问题

问题描述

int array[] = {}

int array[length]

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

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

标签: arrayscsyntax

解决方案


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

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

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


推荐阅读