c语言 3x4x5的三维数组旋转90度,使用指针偏移实现,输入指针和输出指针
时间: 2023-11-02 11:15:16 浏览: 135
vc实现三维图形的旋转
下面是使用指针偏移实现3x4x5三维数组旋转90度的C语言程序:
```c
#include <stdio.h>
void rotate(int (*input)[4][5], int (*output)[5][4][2]) {
int i, j, k;
// input[i][j][k] -> output[k][3-j][i][2]
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 5; k++) {
*(*(*(*(output + k) + 3 - j) + i) + 0) = *(*(*(input + i) + j) + k);
*(*(*(*(output + k) + 3 - j) + i) + 1) = i;
}
}
}
}
int main() {
int input[3][4][5] = {
{{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}},
{{21, 22, 23, 24, 25}, {26, 27, 28, 29, 30}, {31, 32, 33, 34, 35}, {36, 37, 38, 39, 40}},
{{41, 42, 43, 44, 45}, {46, 47, 48, 49, 50}, {51, 52, 53, 54, 55}, {56, 57, 58, 59, 60}}
};
int output[5][4][3][2];
rotate(input, output);
int i, j, k, l;
for (i = 0; i < 5; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 3; k++) {
printf("%d(%d,%d) ", output[i][j][k][0], output[i][j][k][1], k);
}
printf("\n");
}
printf("\n");
}
return 0;
}
```
说明:
- 输入数组`input`是一个三维数组,其中`input[i][j][k]`表示第`i`层、第`j`行、第`k`列的元素。
- 输出数组`output`是一个四维数组,其中`output[k][i][j][0]`表示第`k`列、第`3-i`行、第`j`层的元素,`output[k][i][j][1]`表示该元素在输入数组中的第二维下标(即`j`)。
- 在`rotate`函数中,使用三重循环遍历输入数组`input`,将每个元素旋转90度并存储到输出数组`output`中。
- 由于指针偏移操作比较繁琐,可以使用`*(*(*(*(output + k) + 3 - j) + i) + 0)`和`*(*(*(*(output + k) + 3 - j) + i) + 1)`的方式来访问`output[k][3-j][i][0]`和`output[k][3-j][i][1]`两个元素。
输入指针和输出指针分别为`input`和`output`。
阅读全文