设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
但是专栏如何,任何想法呢?
答案 0 :(得分: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;
}