C/C 中是否存在锯齿状数组?

新手上路,请多包涵

在 C 或 C++ 中是否存在诸如锯齿状数组之类的东西?

当我编译这个:

 int jagged[][] = { {0,1}, {1,2,3} };

我收到此错误:

错误:将“锯齿状”声明为多维数组必须具有除第一个维度之外的所有维度的边界

原文由 unknown 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 525
1 个回答

不,C 和 C++ 中都没有锯齿状 多维数组。您可以创建各种结构,以一些内存成本执行类似的功能(如 指向数组的指针数组),但不能创建实际的 C 样式多维数组。

原因是 C 风格的数组,无论有多少维,都 占用连续的内存区域,没有元数据。所以,就记忆而言,它们都是一维的。只有指针算术的聪明才智(将指针 跨过 一行的大小)才能为您提供额外维度的功能。连续排列的锯齿状数组的行大小不同,因此不能跨过一个常数值,因此需要根据数据大小额外存储,因此无法在 C 类型系统中表示。

当您考虑指针多维数组衰减到什么时会变得更清楚: 数组到指针衰减和将多维数组传递给函数

这就是为什么您会看到错误消息 must have bounds for all dimensions except the first ,因为除了第一个维度之外的所有维度都是跨越数组所必需的。

原文由 Agent_L 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题