关于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)。
数组必须具有非零大小,并且空的初始化器在语法上无效 - 至少必须存在一个初始化器在初始化列表中。
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)。
- 如果没有 形式的指定初始化程序
数组必须具有非零大小,并且空的初始化器在语法上无效 - 至少必须存在一个初始化器在初始化列表中。