我正在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]这样的索引就足够了,并按列访问它。我试过这个并且它有效,但它与许多博客和帖子相矛盾......
为什么呢?这是正常的吗?