#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
void printMatrix(int* ,int ,int );
void tranMatrix(int* ,int ,int );
int main()
{
int A[5][5]={};
srand((unsigned)time(NULL));//利用当前时钟产生随机数种子,这样每次运行产生的随机数将不一样,否则默认都是以1为种子
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
A[i][j]=rand()%100;//产生[0,99)之间的随机数
}
}//随机初始化一个5x5的数组
printMatrix(A[0],5,5);
tranMatrix(A[0],5,5);
cout<<"transformated:"<<endl;
printMatrix(A[0],5,5);
return 0;
}
void printMatrix(int* m,int width,int height)//如果传入参数是二维数组,则需要指定列数,程序不具备可扩展性
{
int index=0;
for(int i=0;i<height;i++)
{
for(int j=0;j<width;j++)
{
index=i*width+j;
cout<<*(m+index)<<" ";
}
cout<<endl;
}
}
void tranMatrix(int* m,int width,int height )
{
int index1=0;
int index2=0;
int tmp=0;
for(int i=0;i<height;i++)
{
for(int j=i;j<width;j++)
{
index1=i*width+j;
tmp=*(m+index1);
index2=j*width+i;
*(m+index1)=*(m+index2);
*(m+index2)=tmp;
}
}
}
PS:
我们知道,如果将二维数组作为函数参数传入,需要指定二维数组的列数,如下所示。但是为了提高程序的可扩展性,我们不希望指定二维数组的行列数,所以我们想到传递给函数的是一维数组,以及数组的行数和列数。
void printMatrix(int M[][5])
{
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cout<<M[i][j]<<" ";
}
cout<<endl;
}
}