首页 > 解决方案 > 多维矩阵中的元素存储在哪个内存地址中?

问题描述

如果数组按行存储并且 char a[100][100][100] 是一个多维字符数组,其中 a[0][0] 的地址为 0x1000,即 a[5][5] 的地址[10]?

解决方案是 0xD54E 但我不知道如何解决这个问题。

标签: arraysmatrixmemory-managementhardwarememory-address

解决方案


多维数组中的元素按行主要顺序存储,这意味着相对于最右边索引的连续元素在内存中将是连续的。

因此,如果您已将数组声明为

char a[L][M][N]; 
  • 元素a[0][0][0]将位于给定地址ad

  • 元素a[0][0][1]将是 ad ad+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 表示ints 或floats 的数组)。


推荐阅读