【发布时间】:2019-12-03 18:46:02
【问题描述】:
代码应该是转置一个矩阵:
#include <iostream>
#include <string>
#include <cmath>
#include <stdio.h>
using namespace std;
void transpose(int (&matrix)[3][3] ){
int t[3][3];
int rows = 3, columns = 3;
for(int i = 0; i < rows; i++){
for(int ii = 0; ii < columns; ii++){
t[ii][i] = matrix[i][ii];
}
}
for(int i = 0; i < rows; i++){
for(int ii = 0; ii < columns; ii++){
matrix[i][ii] = t[i][ii];
}
}
}
int main(){
int m[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
int i = 0, ii = 0;
int rows = 3;
int cols = 3;
for(i = 0; i < rows; i ++){
for(ii = 0; ii < cols; i++){
cout << m[i][ii] << " ";
}
cout << "\n";
}
transpose(m);
cout << "\n" << endl;
for(i = 0; i < rows; i ++){
for(ii = 0; ii < cols; i++){
cout << m[i][ii] << " ";
}
cout << "\n";
}
return 0;
}
我尝试返回一个数组,使用可变大小的数组,使用不同的语法,甚至更改数组本身而不是使用第二个数组。即使它确实工作了片刻,转置功能也无法正常工作。现在它给出了分段错误/核心转储消息。
【问题讨论】:
-
不相关:我尝试返回一个数组 数组是 1970 年代问题的优雅解决方案。您永远不想通过值传递数组,因为复制花费了太长时间并且重复占用了太多内存,因此数组衰减为指针并且总是通过引用传递(除非您将数组包装在结构中)。它们也是通过引用返回的,这意味着局部变量数组在函数结束时超出范围,调用者会得到一个指向无效内存的指针。
-
无关:我认为您可以通过交换值而不是旋转到
temp并将temp复制回来来节省大量工作。 -
@C12 这个问题仍在未回答的问题列表中。我提供的答案没有解决吗?
标签: c++ arrays loops matrix transpose