用二维指针数组实现矩阵翻转,代码可以编译链接但运行出问题,请各位大神...
发布网友
发布时间:2022-04-25 12:00
我来回答
共1个回答
热心网友
时间:2024-11-06 02:13
不明白什么叫 矩阵翻转,是指 行不变,列反序,还是指行列交换,还是指 数据 顺序 123456 变 654321。程序 不能正常运行 是因为 单单指针,没有数据存放空间。你需要动态分配存储空间后才能运行。
int **a;
int NR=3,NC=2; // NR--行数,NC--列数
a = (int **) malloc(sizeof(int *) * NR);
for (j=0;j<NR;j++){ a[j] = (int *) malloc(sizeof(int) * NC);
};
接下来你才可以用 a[i][j];
----------
下面做 行不变,列反序:
void reverse(int ** matrix,int m,int n,int f)
{
int matrix1,i,j;
for(i=0;i<n;i++)
for(j=0;j<m/2;j++)
{
matrix1=matrix[i][m-1-j];
matrix[i][m-1-j]=matrix[i][j];
matrix[i][j]=matrix1;
}
}
主函数调用法:
int main()
{
int i,j,k=0;
int **arr;
arr =(int **)malloc(10*sizeof(int*));
for (i=0;i<10;i++) arr[i]=(int *)malloc(10*sizeof(int));
for( i=0;i<3;i++){
for(j=0;j<2;j++)
{ k++; arr[i][j]=k;
}};
reverse(arr,2,3,1);
for( i=0;i<3;i++)
{
for(j=0;j<2;j++) printf("%d ",arr[i][j]);
printf("\n");
}
return 0;
}