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

矩阵转置函数实现错误排查:C语言线性化矩阵索引问题

C语言矩阵转置函数的索引错误分析

你的问题确实出在线性化矩阵的索引计算上,两处索引公式都写错了:

  1. 原矩阵a是rows行cols列的二维数组,用一维指针访问时,a[j][i]的线性索引应为 j * cols + i(每行有cols个元素,第j行的起始偏移是j*cols,加上列索引i),你错误写成了j * rows + i,这会导致取错元素甚至数组越界。
  2. 转置矩阵tr是cols行rows列的二维数组,tr[i][j]的线性索引应为 i * rows + j(tr的每行有rows个元素,第i行的起始偏移是i*rows,加上列索引j),你错误写成了i * cols + j,不符合tr的存储逻辑。

修正后的GetTranspose函数代码:

void GetTranspose(int* a, int rows, int cols, int* tr)
{
    for (int i = 0; i < cols; i++)
    {
        for (int j = 0; j < rows; j++)
        {
            tr[i * rows + j] = a[j * cols + i];
        }
    }
}

用你提供的测试代码调用修正后的函数,会得到正确的转置结果:

1 2 7 4 
2 3 7 9 
3 5 7 11 

内容的提问来源于stack exchange,提问作者Math Student

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:17:08