我很困惑将2D数组转换为1D数组。 我想以宽度,行和列格式的形式为“a11”(在(1,1)处)写一个相邻的8个元素,而不使用for循环。
|<--Width--->|
cols
____________
| a00 a01 a02
rows | a10 a11 a12
| a20 a21 a22
我试过这样的方式:
a00 = pSrc[(cols-1)+ (rows - 1)*width];
a02 = pSrc[(cols-1)+ (rows + 1)*width];
a10 = pSrc[cols+ (rows -1)*width];
a12 = pSrc[cols+ (rows +1)*width];
a20 = pSrc[(cols+1)+ (rows - 1)*width];
a22 = pSrc[(cols+1)+ (rows + 1)*width];
a01 = pSrc[(cols-1)+ (rows )*width];
a21 = pSrc[(cols+1)+ (rows )*width];
但我认为我犯了一些错误。任何人都可以帮助我。
答案 0 :(得分:2)
由于您没有显示其定义,因此不清楚pSrc
的定义方式。但是,您的代码与声明为一维数组的代码一致:
int pSrc[9]; // Or a larger dimension
您的代码可以合理地编写,因此更加统一:
a00 = pSrc[(cols-1) + (rows-1)*width];
a01 = pSrc[(cols-1) + (rows+0)*width];
a02 = pSrc[(cols-1) + (rows+1)*width];
a10 = pSrc[(cols+0) + (rows-1)*width];
a12 = pSrc[(cols+0) + (rows+1)*width];
a20 = pSrc[(cols+1) + (rows-1)*width];
a21 = pSrc[(cols+1) + (rows+0)*width];
a22 = pSrc[(cols+1) + (rows+1)*width];
即使是最简单的编译器也会忽略+0
,几乎可以肯定甚至没有打开优化器,但它使代码更容易阅读。我还重新排序了条目,因此首先列出上面的行,然后是中间的行,然后是最后一行。同样,它可以更容易地看到模式。
很明显,您正在使用&#39;行&#39;和&#39; cols&#39;向后。你真的需要:
a00 = pSrc[(cols-1) + (rows-1)*width];
a01 = pSrc[(cols+0) + (rows-1)*width];
a02 = pSrc[(cols+1) + (rows-1)*width];
a10 = pSrc[(cols-1) + (rows+0)*width];
a12 = pSrc[(cols+1) + (rows+0)*width];
a20 = pSrc[(cols-1) + (rows+1)*width];
a21 = pSrc[(cols+0) + (rows+1)*width];
a22 = pSrc[(cols+1) + (rows+1)*width];