Arduino 程序中的结构体
一个struct仅仅是不同类型变量的集合。Arduino 中的结构体模仿了C 语言中的结构体。因此,如果您熟悉 C 语言的结构体,Arduino 的结构体应该不会有任何问题。结构体声明语法如下所示:
语法
struct structName{ item1_type item1_name; item2_type item2_name; . . . itemN_type itemN_name; }
下面给出一个例子:
示例
struct student{ String name; int age; int roll_no; }
结构体的元素使用 .(点)符号访问。此符号既可以用于读取结构体的元素,也可以用于更改它们。
示例
以下示例说明了这一点:
struct student{ String name; int age; int roll_no; }; void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println(); student A = {"Yash", 25, 26}; Serial.println(A.name); Serial.println(A.age); Serial.println(A.roll_no); A.age = 27; Serial.println(A.age); } void loop() { // put your main code here, to run repeatedly: }
输出
串口监视器输出如下所示:
如您所见,我们能够使用点符号读取元素并更改结构体的一个元素(age)。
请注意,虽然结构体的声明在每个变量之间包含分号,但结构体的创建包含逗号:
student A = {"Yash", 25, 26};
创建结构体后,您可以像对待任何其他数据类型一样对待它。您甚至可以创建返回结构体的函数。
例如:
student funcA(){ student A = {"Yash", 25, 26}; return A; }
在一些与结构体相关的文献中,您会遇到 → 符号。当您处理指向结构体的指针时,它用于代替点符号。
示例
以下示例演示了这一点。
struct student{ String name; int age; int roll_no; }; student increaseAge(student *B){ B→age = B→age + 1; return *B; } void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println(); student A = {"Yash", 25, 26}; Serial.println(A.age); student *C = &A; student D = increaseAge(C); Serial.println(A.age); Serial.println(D.age); } void loop() { // put your main code here, to run repeatedly: }
输出
串口监视器输出为:
如您所见,结构体指针 C 指向 A。当在 increaseAge 函数中递增 age 时,它也反映在结构体 A 中。
广告