arrays - 多维矩阵中的元素存储在哪个内存地址中?
问题描述
如果数组按行存储并且 char a[100][100][100] 是一个多维字符数组,其中 a[0][0] 的地址为 0x1000,即 a[5][5] 的地址[10]?
解决方案是 0xD54E 但我不知道如何解决这个问题。
解决方案
多维数组中的元素按行主要顺序存储,这意味着相对于最右边索引的连续元素在内存中将是连续的。
因此,如果您已将数组声明为
char a[L][M][N];
元素
a[0][0][0]
将位于给定地址ad
,元素
a[0][0][1]
将是 adad+1
,元素
a[0][1][0]
将在,ad+N
因为 N 是行的大小元素
a[1][0][0]
将在ad+M*N
并且
a[i][j][k]
在地址ad+i*M*N+j*N+k
对于您的示例, i=5,j=5,k=10,N=M=M=100
100*100*5+100*5+10=50510=0xc54de
作为 element 的地址a[0][0][0]=0x1000
,需要将其添加到先前的值中,这给出了答案。
请注意,该公式i*M*N+j*N+k
给出了元素 ikj 在内存中的顺序。要在地址中转换 if,对于具有其他类型而不是 char 的元素数组,它必须乘以元素的大小。(例如 4 表示int
s 或float
s 的数组)。
推荐阅读
- oracle-apex - 从列中减去当前日期以显示在 oracle apex 经典报告中
- flutter - Flutter - 显示来自本地 json 文件的图像 url
- c++ - C++ - 如何根据它的值从向量中删除shared_ptr
- file-upload - 我已经为 Blazemeter 的文件上传过程记录了一个测试计划,但当我第二次尝试运行它时,仍然出现“错误请求--> 400”错误
- python - 如何在 Python 中将 HH:MM:SS 转换为 time.time() 对象
- java - 如何使用 Spring JPA 存储库按多个字段过滤实体?
- css - 如何为水平滚动自定义 Material-UI 粘性标题?
- python - 在 django 中,登录页面内容不显示,只有导航栏可见
- html - 在 SQL 请求中生成具有多个属性的 HTML 标记
- python - 在 matplotlib 中动画散点和线