矩阵转置函数实现错误排查:C语言线性化矩阵索引问题
C语言矩阵转置函数的索引错误分析
你的问题确实出在线性化矩阵的索引计算上,两处索引公式都写错了:
- 原矩阵
a是rows行cols列的二维数组,用一维指针访问时,a[j][i]的线性索引应为j * cols + i(每行有cols个元素,第j行的起始偏移是j*cols,加上列索引i),你错误写成了j * rows + i,这会导致取错元素甚至数组越界。 - 转置矩阵
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
相关产品推荐
相关产品推荐

