请问矩阵转置函数有关问题

请教矩阵转置函数问题
如题,原题目是“使用动态内存分配生成动态数组来重新设计一个3X3矩阵转置函数,使用指针实现函数的功能。”
原题目:
#include <iostream>
using namespace std;
void move (int matrix[3][3])
{int i, j, k;
for(i=0; i<3; i++)
for (j=0; j<i; j++)
{
k = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = k;
}}

int main()
{int i, j;
int data[3][3];
cout << "输入矩阵的元素" << endl;
for(i=0; i<3; i++)
for (j=0; j<3; j++)
{
cout << "第" << i+1 << "行第" << j+1
<<"个元素为:";
cin >> data[i][j];
}
cout << "输入的矩阵的为:" << endl;
for(i=0; i<3; i++)
{
for (j=0; j<3; j++)
cout << data[i][j] << " ";
cout << endl;
}
move(data);
cout << "转置后的矩阵的为:" << endl;
for(i=0; i<3; i++)
{
for (j=0; j<3; j++)
cout << data[i][j] << " ";
cout << endl;
}}


自己根据题目的3x3改成的nxn(vs2010运行成功),最后一个大问题:如何改成nxm矩阵转置函数(不是方阵!),使用指针实现函数的功能。

#include <iostream>
using namespace std;
void move (int *matrix)
{
int i, j, k, n;
cout<<"转换后的行列数"<<endl;
cin>>n;
for(i=0; i<n; i++)
for (j=0; j<i; j++)
{
k = *(matrix+i*n+j);
 *(matrix+i*n+j) = *(matrix+j*n+i);
*(matrix+j*n+i) = k;
}
}
int main()
{
int i, j,n;
cout<<"转换前的行列数"<<endl;
cin>>n;
int *p=new int[n*n];
cout << "输入矩阵的元素" << endl;
for(i=0; i<n; i++)
for (j=0; j<n; j++)
{
cout << "第" << i+1 << "行第" << j+1
<<"个元素为:";
cin >> p[i*n+j];
}
cout << "输入的矩阵的为:" << endl;
for(i=0; i<n; i++)
{
for (j=0; j<n; j++)
cout << p[i*n+j] << " ";
cout << endl;
}
move(p);
cout << "转置后的矩阵的为:" << endl;
for(i=0; i<n; i++)
{
for (j=0; j<n; j++)
cout << p[i*n+j] << " ";
cout << endl;
}
}
------解决方案--------------------
#include <iostream>

using namespace std;

void move (int *matrix, int row, int col) {
int i, j;
int *pt = new int[row * col];
for(i=0; i<row; i++)
for (j=0; j<col; j++)
*(pt + j * row + i) = *(matrix + i * col + j);
for(i=0; i<row; i++)
for (j=0; j<col; j++)
*(matrix + i * col + j) = *(pt + i * col + j);
delete[] pt;
return;
}

void display(int *p, int row, int col) {
int i, j;
for(i=0; i<row; i++) {
for (j=0; j<col; j++)
cout << p[i * col + j] << "\t";
cout << endl;
}
cout << endl;
return;
}


int main() {
int i, j, n, m;
cout << "转换前的行列数" << endl;
cin >> m >> n;
int *p = new int[m * n];
cout << "输入矩阵的元素(" << m << "行" << n << "列):" << endl;
for(i=0; i<m; i++)
for (j=0; j<n; j++)
cin >> p[i * n + j];

cout << endl << "输入的矩阵的为:" << endl;
display(p, m, n);

move(p, m, n);

cout << "转置后的矩阵的为:" << endl;
display(p, n, m);
delete[] p;
return 0;
}