在 C 或 C++ 中是否存在诸如锯齿状数组之类的东西?
当我编译这个:
int jagged[][] = { {0,1}, {1,2,3} };
我收到此错误:
错误:将“锯齿状”声明为多维数组必须具有除第一个维度之外的所有维度的边界
原文由 unknown 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 C 或 C++ 中是否存在诸如锯齿状数组之类的东西?
当我编译这个:
int jagged[][] = { {0,1}, {1,2,3} };
我收到此错误:
错误:将“锯齿状”声明为多维数组必须具有除第一个维度之外的所有维度的边界
原文由 unknown 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
不,C 和 C++ 中都没有锯齿状 多维数组。您可以创建各种结构,以一些内存成本执行类似的功能(如 指向数组的指针数组),但不能创建实际的 C 样式多维数组。
原因是 C 风格的数组,无论有多少维,都 占用连续的内存区域,没有元数据。所以,就记忆而言,它们都是一维的。只有指针算术的聪明才智(将指针 跨过 一行的大小)才能为您提供额外维度的功能。连续排列的锯齿状数组的行大小不同,因此不能跨过一个常数值,因此需要根据数据大小额外存储,因此无法在 C 类型系统中表示。
当您考虑指针多维数组衰减到什么时会变得更清楚: 数组到指针衰减和将多维数组传递给函数
这就是为什么您会看到错误消息
must have bounds for all dimensions except the first
,因为除了第一个维度之外的所有维度都是跨越数组所必需的。