二维数组列数由用户输入,该怎样在定义函数时传入二维数组作为函数参数?

图片说明
编写一个矩阵转置函数,矩阵的行数和列数在程序中由用户输入

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

void  matrixTranspose(int (*a)[cols],int rows,int cols)    //矩阵转置函数
/*二维数组作为函数参数必须将列数写入形式参数中,
二维数组的作为函数参数的传入方法:
1.int sum_arr(int a[N][N],int size)size的值是行数,二维数组可以看作是
元素为数组的一维数组
example:C++.P207 
2.int sum_arr(int (*a)[cols],int size)
两种方法函数中调用都要用a[i][j] 
数组的长度也要作为参数传入,不在函数的内部定义大小*/ 
{
    int b[N][N]={0};
    int i=0,j=0;
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            b[j][i]=a[i][j];
        }
    }
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            a[i][j]=b[i][j];
        }
    }
    cout<<"转置后的矩阵"<<endl; 
    for(i=0;i<rows;i++)
    {
        for(j=0;j<cols;j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
 }  
int main(int argc, char** argv) {
    int rows=0,cols=0;
    int i=0,j=0;
    cout<<"请输入行数和列数"<<endl;
    cin>>rows>>cols;
    int a[rows][cols]={0};
    cout<<"请输入矩阵元素"<<endl; 
    for(i=0;i<rows;i++)
    {
        for(j=0;j<cols;j++)
        {
            cin>>a[i][j];
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
     } 
    matrixTranspose(a,rows,cols);
    return 0;
}
void matrixTranspose(int **a,int n)
{
    int *b = new int[n];
    for (int i = 0; i < n; i++)
    {
        b[i] = (int)a[i];
    }
    for (int i = 0; i < n; i++)
    {
        a[i] = (int*)b[n - i - 1];
    }
    delete[]b;
}

int main()
{
...
matrixTranspose((int**)a3, rows*cols);
...
}