gpt4 book ai didi

c - 查找二维数组单元内存位置

转载 作者:行者123 更新时间:2023-11-30 15:05:52 25 4
gpt4 key购买 nike

有一个数组a[3][4],我们必须使用行主序找到a[2][2]的地址1001 作为基地址。我发现两个公式确实可以找到地址:

For any array a[M][N] Row Major Order:

1) a[i][j] = Base Address+Datatype Size[(N*i)+j]

2) a[i][j] = Base Address+Datatype Size[N*(i-1)+(j-1)]

我尝试了这两个公式,但第一个公式产生了正确的结果,但第二个公式却没有。以下是我如何使用行主顺序查找 a[2][2] 的地址:

Using Formula 1:

a[2][2] = 1001+2[(4*2)+2]
= 1001+2[10]
= 1001+20
= 1021 (correct answer)

Using Formula 2:

a[2][2] = 1001+2[4*(2-1)+(2-1)]
= 1001+2[4+1]
= 1001+2[5]
= 1001+10
= 1011 (Wrong Answer)

我的第二个公式是否有错误,或者我在使用第二个公式的计算中做错了什么?为什么两个答案不一样?

最佳答案

正如阿米特所说,方程不同,因此它们不会给出相同的结果。当对这样的问题有疑问时,尝试在方程中放入一些数字并尝试它们,所以如果我们正在尝试在位置 2,2 处创建一个大小为 4 的数组

方程 1:(N * i) + j, (4 * 2) + 2 = 10

方程 2:N * (I - 1) + (j - 1) = 9

正如您所看到的,由于它们的结果不同,问题不在于您的代码,而在于方程本身

如果你感觉很勇敢,你也可以尝试通过归纳法来证明它

要找到内存地址号,您还需要知道整数在内存中占用了多少空间。您可以使用 sizeof(int); 来执行此操作,它将输出该整数在系统上使用的字节数。

您还需要知道数组的数组在内存中是如何格式化的。就像普通数组一样,数组的数组是连续的,这意味着数组元素之间在内存中没有间隙。因此数组 a[2][2] {1,2}, {3,4} 的格式如下。 1、2、3、4。

使用它,您应该能够通过以下等式找到内存位置数组 a[I][j] = B + W * [N * (I- Lr) + (J - Lc )] 其中:B是基地址I 是要查找的元素的行下标J 是您要查找的列元素W 是元素的大小Lr 是行的下限 - 如果没有给出则为 0Lc 是列的下限 - 如果未给出则为 0M 是矩阵的行数N是矩阵的列数

关于c - 查找二维数组单元内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39547011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com