c语言 二维数组旋转90度 指针输入指针输出 使用指针偏移实现
时间: 2023-11-02 19:02:32 浏览: 103
下面是一个示例代码,可以将一个二维数组逆时针旋转90度:
```
#include <stdio.h>
#define N 4
void rotate(int (*a)[N], int n) {
int i, j, temp;
for (i = 0; i < n / 2; i++) {
for (j = i; j < n - i - 1; j++) {
temp = *(*(a + i) + j);
*(*(a + i) + j) = *(*(a + j) + n - i - 1);
*(*(a + j) + n - i - 1) = *(*(a + n - i - 1) + n - j - 1);
*(*(a + n - i - 1) + n - j - 1) = *(*(a + n - j - 1) + i);
*(*(a + n - j - 1) + i) = temp;
}
}
}
int main() {
int a[N][N] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}};
int i, j;
printf("Original:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
rotate(a, N);
printf("Rotated:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
```
这里使用了一个指向二维数组的指针 `int (*a)[N]`,它可以指向一个二维数组的首行,然后通过指针偏移实现对二维数组元素的访问。在函数 `rotate` 中,使用两个循环遍历二维数组的上半部分,对每个元素进行四次交换,将它移到对应位置,从而完成旋转操作。最后在 `main` 函数中,打印旋转前后的二维数组。
阅读全文