C语言如何通过传引用实现二维数组转置?现有代码执行后无变化
问题根因
你传递二维数组的方式本身没有问题,C语言中数组作为函数参数传递时会退化为首元素指针,天然就是你要的传引用效果,问题出在转置的交换逻辑上:
- 你当前的双重循环遍历了矩阵所有
i和j的组合,每个位置对(i,j)和(j,i)会被执行两次交换:第一次是循环到i=a,j=b时交换,第二次是循环到i=b,j=a时交换回原值,最终矩阵没有任何变化。
修复方案
只需要修改内层循环的起始边界,仅遍历矩阵的上三角区域,保证每个元素对只交换一次即可,修正后的transpose2D函数如下:
void transpose2D(int ar[][SIZE], int rowSize, int colSize) { // 适配方阵转置场景,非方阵需要额外调整存储逻辑 for (int i = 0; i < rowSize; i++) { // 内层j从i+1开始,避免重复交换 for (int j = i + 1; j < colSize; j++) { int temp = *(*(ar + i) + j); *(*(ar + i) + j) = *(*(ar + j) + i); *(*(ar + j) + i) = temp; } } }
修改后运行程序即可得到正确的转置输出:
1 5 6 7 2 1 3 5 3 2 4 6 4 2 4 7
内容的提问来源于stack exchange,提问作者pjyamas
相关产品推荐
相关产品推荐

