gpt4 book ai didi

c++ - 像访问一维数组一样访问二维数组是否合法?

转载 作者:IT老高 更新时间:2023-10-28 22:41:32 26 4
gpt4 key购买 nike

Possible Duplicate:
May I treat a 2D array as a contiguous 1D array?

考虑以下代码:

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

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

额外问题:有没有一种方法可以将 array2d 作为 int[100] 访问,而不需要 reinterpret_cast 或 C-风格一?

最佳答案

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

  • An array subscript is out of range, even if an object is apparently accessible with the given subscript (as in the lvalue expression a[1][7] given the declaration int a[4][5])

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

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

关于c++ - 像访问一维数组一样访问二维数组是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10761624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com