c语言 arr[3][4][5] 三维数组旋转90度使用指针偏移实现,输入指针和输出指针
时间: 2023-11-06 18:08:33 浏览: 99
下面是使用指针偏移实现三维数组旋转90度的示例代码:
```c
void rotate_3d_array(int (*input)[4][5], int (*output)[5][4]) {
// i, j, k 分别代表三维数组的三个下标
int i, j, k;
// 指针 p1 指向输入数组的起始位置
int (*p1)[4][5] = input;
// 指针 p2 指向输出数组的起始位置
int (*p2)[5][4] = output;
// 循环遍历输入数组
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 5; k++) {
// 使用指针偏移将输入数组中的元素复制到输出数组中
*(*(*(p2 + k) + j) + i) = *(*(*(p1 + i) + j) + k);
}
}
}
}
```
在函数中,我们定义了两个指针 `p1` 和 `p2`,分别指向输入数组和输出数组的起始位置。然后使用三重循环遍历输入数组中的所有元素,并使用指针偏移将其复制到输出数组中。其中 `*(*(*(p2 + k) + j) + i)` 表示输出数组中第 `i` 行、第 `j` 列、第 `k` 层的元素,而 `*(*(*(p1 + i) + j) + k)` 表示输入数组中第 `i` 层、第 `j` 行、第 `k` 列的元素。
使用示例:
```c
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];
rotate_3d_array(input, output);
return 0;
}
```
阅读全文