You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:24:03