如何实现2x4二维数组转4x2数组并正确复制所有元素
问题分析
你当前写的是标准二维数组转置逻辑,运行后得到的输出会是:
{1,2} {3,4} {5,6} {7,8}
和你预期的输出不符,核心原因是你需要的不是简单的行列交换,而是按「每两列一组」的规则把原2×4数组的元素重组为4×2数组。
可行实现方案
索引映射规则
根据你的输入输出规律,可总结出两个数组的索引对应关系:
- 原数组
arr2为2行4列,行索引范围0~1,列索引范围0~3 - 目标数组
arr1为4行2列,行索引范围0~3,列索引范围0~1 - 映射公式:
arr1[x][y] = arr2[y][ (x / 2) + 2 * y ]
(C语言中整数除法默认向下取整,完全符合此处计算要求)
完整可运行代码
#include <stdio.h> int main() { // 初始化输入数组 int arr2[2][4] = {{1,3,5,7}, {2,4,6,8}}; int arr1[4][2]; int x,y; // 按映射规则赋值 for (x=0; x<4; x++){ for(y=0; y<2; y++){ arr1[x][y] = arr2[y][ (x / 2) + 2 * y ]; } } // 打印验证结果 for (x=0; x<4; x++){ printf("{%d,%d}\n", arr1[x][0], arr1[x][1]); } return 0; }
运行输出
{1,5} {2,6} {3,7} {4,8}
完全符合预期要求。
内容的提问来源于stack exchange,提问作者BaleKaneSon
相关产品推荐
相关产品推荐

