多维矩阵中的元素存储在哪个内存地址?

in which memory address is stored an element in a multidimensional matrix?

如果数组按行存储并且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] 将是广告 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

作为元素a[0][0][0]=0x1000的地址,需要将其与前一个值相加,即给出答案。

注意公式i*M*N+j*N+k给出了元素ikj在内存中的顺序。要转换地址中的 if,对于具有非 char 类型的元素数组,它必须乘以元素的大小。 (例如 4 代表 ints 或 floats 的数组)。