1.编写并测试3×3 矩阵转置函数, 使用数组保存3×3 矩阵。
2.使用动态内存分配生成动态数组来重新完成上题( n 阶方阵),使用指针实现函数的功能。
#include<iostream>
using namespace std;
void change(int(*p1)[3]);
int main() {
int(*p)[3];
p = new int[3][3];
cout << "请输入3x3矩阵的9个元素:" << endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cin >> *(*(p+i)+j);
}
}
change(p);
cout << "转置后矩阵为:" << endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << *(*(p + i) + j) << " ";
}
cout << endl;
}
for (int i = 0; i < 3; i++)
delete[] p[i];
delete[]p;
return 0;
}
void change(int(*p1)[3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j > i) {
int t = *(*(p1 + i) + j);
*(*(p1 + i) + j) = *(*(p1 + j) + i);
*(*(p1 + j) + i) = t;
}
}
}
}
用vs编译时出现了
warning C4154: 删除数组表达式;转换到提供的指针
运行时出现
我发现问题是出在
for (int i = 0; i < 3; i++)
delete[] p[i];
因为注释这两行后问题就都没了……
有无更好的解决办法?