gpt4 book ai didi

c - 多维数组的堆栈表示

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:08 25 4
gpt4 key购买 nike

有人能解释一下堆栈中二维数组的行和列表示吗?我的老师告诉我们,如果我们有以下矩阵:

a00           a01           a02
a10 a11 a12
a20 a21 a22

Column wise representation: Row Wise representation:
a00 a00
a10 a01
a20 a02
a01 a10
a11 a11
a21 a12
a02 a20
a12 a21
a22 a22

而我只知道多维数组在内存中的表示:a00 然后 a01 然后 a02 然后 a10 等等(地址递增)

我在类里面提出了这个问题,多维数组的黑白堆栈表示和内存表示有什么区别。她说我们这里做的是二维数组,不是指针。这是什么回答。请解释一下。

她还告诉了一些公式来计算堆栈中行表示和列表示的二维数组中任意元素的地址。我没看懂。

位置(A[j,k]) = Base_address(A) + W(M(k-1)+(j-1))

最佳答案

你说,

Whereas i only know about the representation of multidimentional array in memory: a00 then a01 then a02 then a10 and so on(there increasing order of addresses)

在C/C++中,多维数组使用行表示存储。

IIRC,在 FORTRAN 中,多维数组使用列表示存储。

在 C 中,您可以将二维数组定义为:

int a[10][3];

当您将数组传递给函数时,它会衰减为 int (*)[3] 类型的指针。

免责声明: 我的 FORTRAN 已经生锈了,所以请原谅使用不正确的语法

在 FORTRAN 中,您可以将二维数组定义为:

INTEGER A(10, 3)

当你将数组传递给函数时,函数中的参数类型看起来像

INTEGER A(10, *)

语法上的差异使得多维数组在 C 中更自然地由行表示,而在 FORTRAN 中,它们似乎很自然地由列表示。

你还说:

Location(A[j,k]) = Base_address(A) + W(M(k-1)+(j-1))

您似乎正在使用基于 1 的索引。不确定 WM 代表什么。

假设您有 ROW 行数和 COL 列数。

如果你有行表示:

Location(A[j,k]) = Base_address(A) + (j-1)*COL + (k-1)

如果您有列表示:

Location(A[j,k]) = Base_address(A) + (k-1)*ROW + (j-1)

关于c - 多维数组的堆栈表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25752284/

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