14

可能重复:
我可以将二维数组视为连续的一维数组吗?

考虑以下代码:

int array2d[10][10];
int *array1d = array2d[0];

我从未听说过它不起作用的实现,但是array2d通过访问和操作是否合法array1d?标准的哪个部分允许这样做?标准中是否有任何内容阻止实现在每个二级数组之间插入额外的空间或填充(不是它需要的,但仍然如此)?

额外的问题:有没有一种array2d不需要int[100]areinterpret_cast或 C 风格的访问方式?

4

2 回答 2

5

如果没有记错的话,该标准会将此作为官方未定义行为的示例,但基本上总是有效的。[编辑:这就是我的想法:C99,§J.2(未定义的行为):

  • 数组下标超出范围,即使一个对象显然可以使用给定的下标访问(如在给定声明 int a[4][5] 的左值表达式 a[1][7] 中)

不过,我并不完全确定这是否适用,因为您正在获取数组开头的地址并将其转换为指向底层类型的简单指针。]

数组必须是连续的,因此它不能在数组元素之间插入任何填充。无论您有一个数组int还是数组数组,这都是正确的。

于 2012-05-25T21:37:12.827 回答
0

这确实是合法的。该标准明确规定多维数组只是更大的一维数组。我没有确切的报价,但我知道这是真的。

于 2012-05-25T21:37:19.920 回答