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){
   Bage = Bage + 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 中。

更新于:2023年9月15日

38K+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告