c语言 二维数组旋转90度 指针输入指针输出
时间: 2023-11-03 15:00:58 浏览: 38
以下是一个示例代码,将一个二维数组逆时针旋转90度,并以指针输入和输出:
```c
#include <stdio.h>
void rotate(int **matrix, int n) {
// 先沿着中心水平线翻转
for (int i = 0; i < n / 2; i++) {
for (int j = 0; j < n; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[n - i - 1][j];
matrix[n - i - 1][j] = temp;
}
}
// 再沿着对角线交换
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
int main() {
int n;
printf("请输入矩阵的大小:");
scanf("%d", &n);
int **matrix = (int **) malloc(n * sizeof(int *)); // 动态分配二维数组
for (int i = 0; i < n; i++) {
matrix[i] = (int *) malloc(n * sizeof(int));
printf("请输入第%d行的%d个元素:", i + 1, n);
for (int j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]);
}
}
rotate(matrix, n);
printf("旋转后的矩阵为:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
// 释放内存
for (int i = 0; i < n; i++) {
free(matrix[i]);
}
free(matrix);
return 0;
}
```
需要注意的是,二维数组在作为函数参数传递时,会自动转换成指向第一行的指针,因此函数参数应该声明为 `int **matrix`,而不是 `int matrix[][]`。此外,动态分配二维数组需要使用两次 `malloc`,以分别分配行和列的空间,释放内存时也需要分别释放。