要动态获取数组元素,可以使用指针和动态内存分配。以下是一个示例代码,演示如何动态获取包含不同大小字符串的结构体数组的元素:
#include
// 结构体定义
struct MyStruct {
char* str;
};
// 函数声明
void dynamicArrayAccess(MyStruct* arr, int index);
void setup() {
Serial.begin(9600);
// 动态分配结构体数组
int arraySize = 3;
MyStruct* myArray = new MyStruct[arraySize];
// 初始化结构体数组的元素
myArray[0].str = new char[5]; // 分配存储空间
strcpy(myArray[0].str, "Hello");
myArray[1].str = new char[7];
strcpy(myArray[1].str, "World!");
myArray[2].str = new char[4];
strcpy(myArray[2].str, "Foo");
// 动态获取数组元素
int index = 1;
dynamicArrayAccess(myArray, index);
// 释放内存
for (int i = 0; i < arraySize; i++) {
delete[] myArray[i].str;
}
delete[] myArray;
}
void loop() {
// 空函数
}
// 函数定义
void dynamicArrayAccess(MyStruct* arr, int index) {
Serial.println(arr[index].str);
}
在上面的示例代码中,我们首先定义了一个结构体MyStruct
,其中包含一个char*
类型的成员变量str
。然后,在setup()
函数中,我们使用new
运算符动态分配了一个包含3个MyStruct
结构体的数组myArray
。接下来,我们分别为每个结构体成员变量str
分配了不同大小的内存空间,并使用strcpy()
函数将字符串复制给它们。
在dynamicArrayAccess()
函数中,我们使用指针和索引来动态获取数组元素,并将其打印到串口。
最后,在loop()
函数中,我们什么都没有做,只是保持程序运行。
记得在程序结束时释放动态分配的内存,以防止内存泄漏。在这个示例中,我们使用delete[]
运算符释放了每个结构体成员变量str
的内存空间,然后使用delete[]
运算符释放了整个结构体数组myArray
的内存空间。