用C语言实现将512*512*100的三维数组转换成为512*5120*10的三维数组,并打印输出512*5120*10的三维数组
时间: 2024-09-09 17:06:43 浏览: 81
C语言二维数组几种常用的表示方法
在C语言中,可以使用结构体数组的方式来实现这种转换。假设原始的三维数组`float original[512][512][100]`,我们需要将其扁平化为一个新的数组`newArray[512][5120][10]`。这里我们简单地将100个元素打包到新的10个元素里,每次移动10个元素。
```c
#include <stdio.h>
// 原始数组类型
typedef struct {
float values[100];
} OriginalArray;
// 新数组类型
typedef struct {
float values[512 * 512];
} NewArray;
void flatten_array(OriginalArray arr[], int rows, int cols, int depth, NewArray newArray) {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols * depth; j += depth) {
// 将100个元素复制到新的512*512大小的块
memcpy(newArray.values + i * 512 * 512 + j, arr[i].values, sizeof(float) * depth);
}
}
}
// 打印新数组
void print_array(NewArray array) {
for (int i = 0; i < 512; ++i) {
for (int j = 0; j < 5120; ++j) {
printf("%.6f ", array.values[i * 512 + j]);
}
printf("\n");
}
}
int main() {
// 假设已有的原始数组
OriginalArray original[512][512];
// 初始化原始数组内容...
// ...
// 创建新数组
NewArray newArray;
// 转换并打印
flatten_array(original, 512, 512, 100, &newArray);
print_array(newArray);
return 0;
}
```
这个程序首先将`original`数组的内容复制到`newArray`的相应位置,然后通过`print_array`函数按行打印出结果。注意,你需要自己处理初始化`original`数组的内容以及正确分配内存给`newArray`。
阅读全文