为了账号安全,请及时绑定邮箱和手机立即绑定

C / C ++多维数组内部

C / C ++多维数组内部

C++ C
慕容3067478 2019-08-19 14:54:51
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]。以下是一些二维数组的内存布局:


查看完整回答
反对 回复 2019-08-19
  • 2 回答
  • 0 关注
  • 496 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信