访问表示 2D 矩阵的 1D 存储数组

Access to 1D stored array representing 2D matrix

本文关键字:1D 存储 数组 访问表 表示 2D 访问      更新时间:2023-10-16

>我正在Excel VBA中创建2D方阵

Dim Matrix(0 To Nrows, 0 To Ncols) as double

然后我把它作为参数 ByRef 传递给函数库,

My_foo(Matrix(0,0))

调用C++代码。在C++代码中,我想访问矩阵以获取值并进行其他操作。为此,我将这些值读取为 1D 数组,因此我创建了一个索引 [R*Ncols + C],其中 R 和 C 是 2D 表示中的元素位置

void _stdcall My_foo(double* M, long Nrows, long Ncols){
double Value;
R = 10;
C = 0;
Value =  M[R*Ncols + C];
}

在这一点上,我希望找到具有位置 (10,0( 的元素,但我找到了元素 (0,10(。似乎我的矩阵以倒置的列/行顺序存储。

设置像 [C*Nrows + R] 这样的索引并按列访问它就足够了。我试过这个,它有效,但它与许多博客和帖子相矛盾......

为什么?正常吗?

虽然 C/C++ 使用行主格式来表示多维数组,但对于其他语言,进行了不同的选择,因此 Excel VBA 使用列主格式也就不足为奇了,就像本论坛问题中也记录的那样。