c - 在 C 中动态分配 3D 矩阵
问题描述
所以我有一个像这样创建的二维数组:
int** init_grid(int cell_grid_size) {
// matrix variables
int *memory_grid;
int **matrix;
int i;
int j;
// memory for matrix
memory_grid = malloc(cell_grid_size * cell_grid_size * sizeof(int));
matrix = malloc(cell_grid_size * sizeof(int *));
// fill matrix with rows
for(i = 0; i < cell_grid_size; i++) {
matrix[i] = &memory_grid[i*cell_grid_size];
}
// return fresh matrix
return matrix;
}
如您所见,它正在初始化一个整数矩阵。但是,我想初始化一个大小为 2 的整数数组矩阵(即 3D 矩阵),但我似乎不太了解如何添加下一个维度。
任何帮助将不胜感激。
解决方案
用于int ***
指向类型为 的指针数组int **
。每个指向一个int *
. 每个int *
指向一个数组的指针int
。
为简洁起见,分配检查NULL
省略。
int*** init_grid(size_t xsize, size_t ysize, size_t zsize) {
int ***matrix = malloc(sizeof matrix[0] * xsize);
for (x = 0; x < xsize; x++) {
matrix[x] = malloc(sizeof matrix[x][0] * ysize);
for (y = 0; y < ysize; y++) {
matrix[x][y] = malloc(sizeof matrix[x][y][0] * zsize);
// or to zero-out the `int` data
matrix[x][y] = calloc(zsize, sizeof matrix[x][y][0]);
}
}
return matrix;
}
用于size_t
数组索引和大小调整。
免费:
void free_grid(int ***matrix, size_t xsize, size_t ysize) {
if (matrix) {
for (x = 0; x < xsize; x++) {
if (matrix[x]) {
for (y = 0; y < ysize; y++) {
free(matrix[x][y])
}
}
free(matrix[x]);
}
free(matrix);
}
}
推荐阅读
- abap - Can secondary index help at SELECTION with INNER JOIN?
- outlook - Does Outlook appointment add-in support for iphone outlook app
- tensorflow - Error while using Tensorflow-Hub and Colab TPU
- c - 我可以访问函数返回值两次而不将其存储在变量中或再次调用该函数吗?
- arrays - Ruby - how to slice an array and sum its elements on a condition
- python - 离散颜色条缺少颜色
- javascript - typescript 如何具有与 javascript 相同的抽象级别,从而使其有资格进行转译?
- docker-compose - 无法连接到 127.0.0.1:9000。拒绝连接
- django - 在 Django Docker 文件中安装 npm
- xcode - 如果我没有 iPhone,如何从 Xcode 将应用程序上传到 App Store Connect?