#include <iostream>
#include <cstring>
// 定义自定义结构体
struct MyStruct {
int id;
double value;
char name[50];
};
// 初始化三维数组
void initializeArray(MyStruct*** arr, int x, int y, int z) {
for (int i = 0; i < x; ++i) {
for (int j = 0; j < y; ++j) {
for (int k = 0; k < z; ++k) {
arr[i][j][k].id = i * 100 + j * 10 + k;
arr[i][j][k].value = i + j + k;
std::snprintf(arr[i][j][k].name, sizeof(arr[i][j][k].name), "Element_%d_%d_%d", i, j, k);
}
}
}
}
// 查找并修改特定元素
void findAndModifyElement(MyStruct*** arr, int x, int y, int z, int targetId, double newVal) {
for (int i = 0; i < x; ++i) {
for (int j = 0; j < y; ++j) {
for (int k = 0; k < z; ++k) {
if (arr[i][j][k].id == targetId) {
arr[i][j][k].value = newVal;
return;
}
}
}
}
std::cerr << "Element with id " << targetId << " not found." << std::endl;
}
// 释放三维数组的内存
void freeArray(MyStruct*** arr, int x, int y) {
for (int i = 0; i < x; ++i) {
for (int j = 0; j < y; ++j) {
delete[] arr[i][j];
}
delete[] arr[i];
}
delete[] arr;
}
int main() {
int x = 3, y = 4, z = 5;
// 动态分配三维数组
MyStruct*** threeDArray = new MyStruct**[x];
for (int i = 0; i < x; ++i) {
threeDArray[i] = new MyStruct*[y];
for (int j = 0; j < y; ++j) {
threeDArray[i][j] = new MyStruct[z];
}
}
// 初始化数组
initializeArray(threeDArray, x, y, z);
// 查找并修改特定元素
findAndModifyElement(threeDArray, x, y, z, 111, 99.99);
// 释放内存
freeArray(threeDArray, x, y);
return 0;
}
- 自定义结构体定义:定义了
MyStruct
结构体,包含 int
类型的 id
,double
类型的 value
和 char
数组类型的 name
。
- 初始化函数:
initializeArray
函数对三维数组中的每个元素进行初始化。
- 查找与修改函数:
findAndModifyElement
函数查找特定 id
的元素并修改其 value
,如果未找到则输出提示信息。
- 内存释放函数:
freeArray
函数按照正确的顺序释放三维数组动态分配的内存,避免内存泄漏。
- 主函数:在
main
函数中动态分配三维数组,调用初始化、查找修改和内存释放函数。在动态分配和访问数组元素时,要注意指针越界问题,这里通过在循环中使用正确的边界条件来避免越界。