0

令 W 为 2D 数组的宽度,H 为高度。使用行主要布局,我可以这样做:

const int W = 3, H=2;
int m[H][W] = {{1,2,3}, {4,5,6}};
int* oneD = &m[0][0];
assert(oneD[1*W + 2] == m[1][2]); // element 6, y=1, x=2

但是专栏专业怎么样,有什么想法吗?

4

1 回答 1

2

在 C 内部使用行主要方法(m 在内存中连续排列为 1、2、3、4、5、6),以便您可以直接用 oneD 表示示例。然而,列优先布局不能这么简单地表示,因为 C 内部使用行优先方法。因此,要获得正确的列主要方法,只需使用以下方法

#include <stdio.h>
#include <iostream>
int main() {
const int W = 3, H=2;
int m[H][W] = {{1,2,3}, {4,5,6}};
int* oneD = new int[H*W];
for(int i=0; i<W; i++)
    for(int j=0; j<H; j++)
        oneD[H*i+j]=m[j][i];
for(int i=0; i<H*W; i++)
    std::cout<<oneD[i]<<" ";
return 0;
}
于 2013-01-29T21:23:58.350 回答