为何C语言中允许使用数组的数组?
为何C语言中允许使用数组的数组?
最近翻C17语言标准的时候,我突然卡壳了——哎,为啥C里能用上数组的数组啊?
抱着这个疑问往下挖,还真在标准的6.2.5“类型”章节的第20条找到了关键依据:
可以基于对象类型和函数类型构造任意数量的派生类型,规则如下:
—— 数组类型描述的是一组连续分配的非空对象集合,这些对象拥有特定的成员对象类型(称为元素类型)。只要指定数组类型,其元素类型就必须是完整类型。
说直白点,C的类型系统本来就支持一层一层堆叠派生类型,数组本身就是一种合法的派生类型,那自然能把另一个数组(只要它是完整类型)当成元素类型来定义新数组。比如我们常写的int my_arr[3][4];,本质上就是一个包含3个元素的数组,每个元素都是int[4]类型的数组,完全贴合标准里的数组类型定义,内存也是连续分配的,完全合规~
备注:内容来源于stack exchange,提问作者ALICEZzz
相关产品推荐
相关产品推荐

