c语言 三维数组旋转90度,使用指针偏移实现
时间: 2023-12-08 21:50:40 浏览: 101
假设我们要将一个n x n x n的三维数组顺时针旋转90度,可以通过指针偏移实现。具体思路如下:
1. 首先定义一个临时数组temp,用于存储旋转后的结果。
2. 然后遍历原始数组,将原数组中的每个元素通过指针偏移,放入temp数组中对应的位置。
3. 最后将temp数组复制回原数组中。
代码实现如下:
```c
void rotate(int arr[][N][N], int n) {
int temp[N][N][N];
int *p, *q;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
p = &arr[i][j][k];
q = &temp[k][n-j-1][i];
*q = *p;
}
}
}
memcpy(arr, temp, sizeof(temp));
}
```
其中,p指针指向原始数组中的元素,q指针指向temp数组中对应的元素。通过指针偏移,将*p的值赋给*q。
最后使用memcpy()函数将temp数组复制回原数组中。
相关问题
c语言 三维数组旋转90度,使用指针偏移实现,输入指针和输出指针
下面是一个使用指针偏移实现将三维数组旋转90度的代码:
```c
void rotate(int *in, int *out, int n) {
int i, j, k;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
for (k = 0; k < n; k++) {
*(out + k*n*n + j*n + n-i-1) = *(in + i*n*n + j*n + k);
}
}
}
}
```
其中,`in`是输入指针,`out`是输出指针,`n`是三维数组的边长。在循环中,通过指针偏移实现了将三维数组旋转90度的操作。具体来说,对于输入数组中的第`(i, j, k)`个元素,在输出数组中对应的位置是`(k, j, n-i-1)`。
使用示例:
```c
int main() {
int in[2][2][2] = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
int out[2][2][2];
rotate((int *)in, (int *)out, 2);
// 输出旋转后的数组
int i, j, k;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
for (k = 0; k < 2; k++) {
printf("%d ", out[i][j][k]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
```
输出结果:
```
5 1
6 2
7 3
8 4
```
注意,在将输入指针转化为`int *`类型时需要使用强制类型转换。
c语言 三维数组旋转90度,使用指针偏移实现,输入指针和输出指针 arr[3][4][5]
下面是实现的代码:
```c
void rotate_3d_array(int (*arr)[4][5], int (*rotated_arr)[5][4]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 5; k++) {
*((*(rotated_arr + k)) + (3 - i) * 4 + j) = *((*(arr + i)) + j * 5 + k);
}
}
}
}
```
其中,`arr` 是输入指针,`rotated_arr` 是输出指针。我们使用了指针偏移的方式来实现旋转。具体来说,我们将 `arr[i][j][k]` 旋转后的结果存储在 `rotated_arr[k][3-i][j]` 中。
由于数组名本身就是指向数组首元素的指针,因此在函数参数中,我们可以使用 `int (*arr)[4][5]` 来表示一个指针,它指向一个 `3 × 4 × 5` 的三维数组。同理,`int (*rotated_arr)[5][4]` 表示一个指向一个 `5 × 4` 的二维数组的指针。
在函数内部,我们使用 `*(arr + i)` 来表示二维数组 `arr[i]`(即 `arr[i][0]`)。使用 `*((*(arr + i)) + j * 5 + k)` 来表示三维数组 `arr[i][j][k]`。同理,`*((*(rotated_arr + k)) + (3 - i) * 4 + j)` 表示旋转后的结果。
使用方法如下:
```c
int arr[3][4][5] = { /* 数组内容 */ };
int rotated_arr[5][4];
rotate_3d_array(arr, rotated_arr);
```
`rotated_arr` 数组将存储旋转后的结果。
阅读全文
相关推荐
![cpp](https://img-home.csdnimg.cn/images/20250102104920.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pptx](https://img-home.csdnimg.cn/images/20241231044947.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)