【发布时间】:2016-10-29 15:49:39
【问题描述】:
我知道this answer 违反了reinterpret_cast rules,但它也假定子数组将被线性分配。
我认为这并不能保证,但当我搜索标准时,我发现我的信心在动摇。如果我静态分配一个二维数组,像这样:
int foo[][4] = { { 5, 7, 8 },
{ 6, 6 },
{},
{ 5, 6, 8, 9 } };
我可以假设所有元素都将被线性分配吗?也就是说如果foo[0]在地址0x00000042,会:
-
foo[1]地址为0x00000052 -
foo[2]位于地址 0x00000062 -
foo[3]在地址0x00000072
这些地址是十六进制的,是的,它们为 sizeof(int) == 4 的 4 元素子数组提供空间;它们可能会也可能不会被零初始化。
【问题讨论】:
-
如果
foo[0]位于地址0x00000042,则foo[1]将位于地址0x00000052,仅当sizeof(int)为4时。我怀疑你认为sizeof(int)是4。 -
@NathanOliver 这绝对不是骗子,因为他
mallocs 内存在一个循环中,所以你绝对不能保证这些子数组在内存中的布局。 -
@JonathanMee 问题不一样,但答案描述的是静态二维数组而不是动态分配的指针数组。因此我投了反对票。
-
@RSahu 好的我已经编辑了我认为我已经涵盖了所有基础......
标签: c++ arrays memory-layout static-allocation