多维矩阵中的元素存储在哪个内存地址?
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 代表 int
s 或 float
s 的数组)。
如果数组按行存储并且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 代表 int
s 或 float
s 的数组)。