百分矩阵转置算法求解,该怎么处理

百分矩阵转置算法求解
紧急求解,已知一个2*3的数组,
int arr1[2][3] = {0, 1, 2, 3, 4, 5};
int* p1 = (int*)arr1;

定义一个函数,void Fun(int*& p, int row, int col), 调用Fun(p1, 2, 3)之后,能够实现矩阵转置,
即将arr1指向的内存的数组值修改为如下:
0,3,1,4,2,5

即将一个arr[2][3]的数组转换为一个arr[3][2]的数组。
要求:
Fun函数实现中只可以申请三个int栈变量,int i, int j可以用来循环,int temp用来值交换的临时变量。

------解决方案--------------------
//*****************lz自己改成自己想要的吧。
#include<iostream>
#include<ctime>
#include<iomanip>
using namespace std;
void main()
{
const int m=2;
const int n=3;
int matrix[m][n];//矩阵
int tmatrix[n][m];//转置矩阵
int i,j;
cout<<"input m*n matrix:"<<endl;
for(i=0;i<m;i++)//生成矩阵
{
for(j=0;j<n;j++)
{
cin>>matrix[i][j];//给数组元素赋值
cout<<setw(4)<<matrix[i][j]<<" ";//输出矩阵
}
cout<<endl;
}
cout<<"transpose of matrix:"<<endl;
for(i=0;i<n;i++)//得到转置矩阵
{
for(j=0;j<m;j++)
{
    tmatrix[i][j]=matrix[j][i];//给数组元素赋值
cout<<setw(4)<<tmatrix[i][j]<<" ";//输出矩阵
}
cout<<endl;
}
}
------解决方案--------------------
调试结果:
input m*n matrix:
0 1 2 3 4 5
   0    1    2
   3    4    5
transpose of matrix:
   0    3
   1    4
   2    5
Press any key to continue

------解决方案--------------------

#include <stdlib.h>
#include <stdio.h>

int* transpose(int* a, int m, int n)
{
int* b = (int*)malloc(sizeof(int) * m * n);
int i, j;
    
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
b[i * m + j] = a[j * n + i];

return b;
}

int main(int argc, char* argv[])
{
int a[2][3] = {0, 1, 2, 3, 4, 5};
int *b = transpose((int*)&a[0][0], 2, 3);
int i, j;

for(i = 0; i < 3; i++)

for(j = 0; j < 2; j++)
printf("%d ", *(b + i * 2 + j));
printf("\n");
}

free(b);
return 0;
}

------解决方案--------------------
引用:
引用:转置只有明白了原理写出代码很容易呀

原理当然知道了,可是我想不用申请额外的内存来完成

定义两个矩阵,根据原理,实现矩阵的转置,不需要申请额外的空间
------解决方案--------------------
那可以这样来实现:

#include <stdio.h>

void transpose(int* a, int m, int n)
{
int i, j;
int tn = -1, tm = -1;