C / C ++多维数组内部我有一个关于C / C ++如何在内部存储使用符号声明的多维数组的问题foo[m][n]。我不是在质疑指针的纯指针等等......因为速度原因,我在问...如果我错了,请纠正我,但语法上foo是一个指针数组,它们本身指向一个数组int foo[5][4]*(foo + i) // returns a memory address*( *(foo + i) + j) // returns an int我从很多地方听说过C / C ++编译器foo[m][n]在幕后转换为一维数组(计算所需的一维索引i * width + j)。但是如果这是真的那么以下就可以了*(foo + 1) // should return element foo[0][1]因此,我的问题foo[m][n]是:(总是吗?)存储在内存中作为平面一维数组是真的吗?如果是这样,为什么上面的代码如图所示。
2 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
是的,C / C ++将多维(矩形)数组存储为连续的内存区域。但是,您的语法不正确。要修改元素foo[0][1]
,以下代码将起作用:
*((int *)foo+1)=5;
显式类型转换是必要的,因为foo+1
,是一样的&foo[1]
它是不是在所有的同样的事情foo[0][1]
。*(foo+1)
是指向平坦存储区中第五个元素的指针。换句话说,*(foo+1)
基本上是foo[1]
和**(foo+1)
是foo[1][0]
。以下是一些二维数组的内存布局:
- 2 回答
- 0 关注
- 496 浏览
添加回答
举报
0/150
提交
取消