有些人可以解释一下这行吗?堆栈中二维数组的列式表示?我的老师告诉我们,如果我们有以下矩阵:
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,依此类推(地址顺序递增)
我在课堂上提出了这个问题b / w堆栈表示的区别是什么?多维数组的内存表示。她说我们这里做的二维数组不是指针。那是什么答案。请解释一下。
她还告诉一些公式计算堆栈中行表示和列表示的二维数组的任何元素的地址。我不明白。
位置(A [j,k])= Base_address(A)+ W(M(k-1)+(j-1))
答案 0 :(得分:1)
以下是RAM中2D阵列的更好表示:
列式表示:
Chip1 Chip2 Chip3
a00 a01 a02
a10 a11 a12
a20 a21 a22
Row Wise表示:
Chip1 Chip2 Chip3
a00 a10 a20
a01 a11 a21
a02 a12 a22
答案 1 :(得分:1)
你说,
虽然我只知道内存中多维数组的表示:a00然后是a01然后是a02然后是a10,依此类推(地址顺序递增)
在C / C ++中,使用行表示存储多维数组。
在C中,您可以将2D数组定义为:
int a[10][3];
当您将数组传递给函数时,它会衰减为int (*)[3]
类型的指针。
免责声明: 我的FORTRAN生锈了,所以请原谅使用不正确的语法
在FORTRAN中,您可以将2D数组定义为:
INTEGER A(10, 3)
当您将数组传递给函数时,函数中的参数类型看起来像
INTEGER A(10, *)
语法的差异使得C中的多维数组由行表示更自然,而在FORTRAN中,它们似乎很自然地由列表示。
你也说过:
Location(A[j,k]) = Base_address(A) + W(M(k-1)+(j-1))
您似乎使用的是基于1的索引。不确定W
和M
代表什么。
我们假设您有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)