K-b*_*llo 14 c++ language-lawyer
可能重复:
我可以将2D数组视为连续的1D数组吗?
请考虑以下代码:
int array2d[10][10];
int *array1d = array2d[0];
Run Code Online (Sandbox Code Playgroud)
我从来没有听说过一个无法实现的实现,但访问和操作array2d通过array1d是否合法?标准的哪个部分允许这个?标准中是否存在阻止实现在每个第二级数组之间插入额外空间或填充的内容(不是它需要的,但仍然)?
奖金问题:有没有一种方法可以访问,array2d因为int[100]它不需要一个reinterpret_cast或一个C风格的?
如果内存服务,标准将此作为正式未定义行为的示例,但基本上始终有效.[编辑:这就是我的想法:C99,§J.2(未定义的行为):
- 数组下标超出范围,即使一个对象显然可以使用给定的下标访问(如左边的表达式a [1] [7],给出声明int a [4] [5])
我不完全确定是否适用,因为你得到数组开头的地址并将其转换为指向底层类型的简单指针.
数组必须是连续的,因此它不能在数组的元素之间插入任何填充.无论你有一个数组int还是一个数组数组都是如此.