gpt4 book ai didi

c - 数组二维到一维的转换与混淆

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:29 25 4
gpt4 key购买 nike

我对将二维数组转换为一维数组感到困惑。我想以 width , rows 和 cols 格式的形式为“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];

但我认为我犯了一些错误。任何人都可以帮助我。

最佳答案

不清楚 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 即使是最简单的编译器也会忽略,几乎可以肯定甚至没有打开优化器,但它使代码更容易阅读。我还对条目重新排序,以便首先列出上面的行,然后是中间的行,然后是底行。同样,它可以更轻松地查看模式。

很明显,您正在反向使用“行”和“列”。你实际上需要:

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];

关于c - 数组二维到一维的转换与混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26112774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com