【发布时间】:2019-02-09 03:12:18
【问题描述】:
int a[][3]={{1,2,3},11,2,3,4,5};
int a[][3]={1,2,3,11,2,3,4,5};
这两者有什么区别吗?它们对于编译器是否相同?
【问题讨论】:
标签: c multidimensional-array initialization
int a[][3]={{1,2,3},11,2,3,4,5};
int a[][3]={1,2,3,11,2,3,4,5};
这两者有什么区别吗?它们对于编译器是否相同?
【问题讨论】:
标签: c multidimensional-array initialization
由于6.7.8 Initialization, 20 (C99),我很确定它们是相同的:
- 如果聚合或联合包含属于聚合或联合的元素或成员, 这些规则递归地适用于子聚合或包含的联合。如果初始化器 子聚合或包含的联合以左大括号开头,初始化器由 该大括号及其匹配的右大括号初始化 子聚合或包含的联合。否则,列表中只有足够的初始化器是 考虑到子聚合的元素或成员或第一个成员 包含的联合;剩下的任何初始化器都用于初始化下一个元素或 当前子聚合或包含的联合所属的聚合的成员。
您正在初始化一个子数组(大小为 3)。
在第一个版本中,{1,2,3} 用于显式大括号。
在第二个版本中没有大括号,因此接下来的三个值 (1,2,3) 取自初始化列表。
【讨论】: