在Linux C环境下,定义一个三维的结构体数组指针并遍历它涉及几个步骤。
首先,需要定义一个结构体,然后定义一个指向这个结构体数组的指针,最后使用嵌套循环来遍历它。
咱们定义了一个名为Person
的结构体,它包含name
和age
两个成员。然后定义了一个指向三维Person
数组的指针,并遍历它。
示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义Person结构体
typedef struct {
char name[50];
int age;
} Person;
int main() {
// 定义三维数组的大小
const int depth = 2;
const int numRows = 3;
const int numCols = 4;
// 动态分配三维数组的内存
Person ***people = (Person ***)malloc(depth * sizeof(Person **));
if (people == NULL) {
perror("Failed to allocate memory for people array");
return EXIT_FAILURE;
}
for (int i = 0; i < depth; i++) {
people[i] = (Person **)malloc(numRows * sizeof(Person *));
if (people[i] == NULL) {
perror("Failed to allocate memory for a layer of people");
// 释放已经分配的内存
for (int j = 0; j < i; j++) {
free(people[j]);
}
free(people);
return EXIT_FAILURE;
}
for (int j = 0; j < numRows; j++) {
people[i][j] = (Person *)malloc(numCols * sizeof(Person));
if (people[i][j] == NULL) {
perror("Failed to allocate memory for a row of people");
// 释放已经分配的内存
for (int k = 0; k < j; k++) {
free(people[i][k]);
}
free(people[i]);
// 释放之前已经分配的内存
for (int l = 0; l < i; l++) {
free(people[l]);
}
free(people);
return EXIT_FAILURE;
}
}
}
// 初始化数组
for (int i = 0; i < depth; i++) {
for (int j = 0; j < numRows; j++) {
for (int k = 0; k < numCols; k++) {
snprintf(people[i][j][k].name, sizeof(people[i][j][k].name), "Person %d-%d-%d", i, j, k);
people[i][j][k].age = i * j * k + 10;
}
}
}
// 遍历三维数组
for (int i = 0; i < depth; i++) {
for (int j = 0; j < numRows; j++) {
for (int k = 0; k < numCols; k++) {
printf("Name: %s, Age: %d\n", people[i][j][k].name, people[i][j][k].age);
}
}
}
// 释放内存
for (int i = 0; i < depth; i++) {
for (int j = 0; j < numRows; j++) {
free(people[i][j]);
}
free(people[i]);
}
free(people);
return EXIT_SUCCESS;
}
这个示例中:
- 我们首先定义了三维数组的大小:
depth
(深度或层数)、numRows
(行数)和numCols
(列数)。 - 然后,我们为三维数组的每一层分配了指向二维数组的指针数组的内存。
- 对于每一层,我们又为每一行分配了指向一维数组的指针的内存。
- 对于每一行,我们最后分配了存储
Person
结构体的内存。 - 在初始化时,我们使用三层嵌套的循环来设置每个
Person
结构体的name
和age
字段。 - 遍历数组时,我们使用三层嵌套的循环来访问并打印每个
Person
结构体的信息。 - 最后,我们按照相反的顺序释放了之前分配的所有内存,首先释放每一行的内存,然后释放每一层的内存,最后释放整个三维数组的指针。
学废了么,<(* ̄▽ ̄*)/