Arduino struct结构体定义和使用方法
1. 直接使用struct
定义
struct People {
char *name;
int age;
float Height;
} ;
void setup() {
Serial.begin(115200);
struct People stu1;
stu1.name = "xiao";
stu1.age = 12;
stu1.Height = 46.2;
Serial.println(stu1.name);
Serial.println(stu1.age);
Serial.println(stu1.Height);
}
void loop() {
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/e65741bacdd14d55b3cf471242f41edb.png)
2. 创建结构体同时,后面直接添加变量名
struct People {
char *name;
int age;
float Height;
}stu1;
void setup() {
Serial.begin(115200);
stu1.name = "xiao";
stu1.age = 12;
stu1.Height = 46.2;
Serial.println(stu1.name);
Serial.println(stu1.age);
Serial.println(stu1.Height);
}
void loop() {
}
//项目使用了 3072 字节,占用了 (10%) 程序存储空间。最大为 30720 字节。
//全局变量使用了212字节,(10%)的动态内存,余留1836字节局部变量。最大为2048字节。
![在这里插入图片描述](https://img-blog.csdnimg.cn/b730223fc9724356a42b8bf71815c3d3.png)
3. 创建结构体同时,后面直接添加变量名并且赋值
struct People {
char *name;
int age;
float Height;
}stu1={"chen",13,47.65};
void setup() {
Serial.begin(115200);
Serial.println(stu1.name);
Serial.println(stu1.age);
Serial.println(stu1.Height);
}
void loop() {
}
项目使用了 1774 字节,占用了 (5%) 程序存储空间。最大为 30720 字节。
全局变量使用了192字节,(9%)的动态内存,余留1856字节局部变量。最大为2048字节。
![在这里插入图片描述](https://img-blog.csdnimg.cn/76fe97a18aeb46bba7eeccb68a7a316d.png)
4. typedef struct
定义方式
创建typedef struct
别名的方式,调用结构体变量时,通过别名来创建结构体变量,仅仅是在申请变量的时候多了一种对结构体对象的名称多了一种选择。
typedef struct People {
char *name;
int age;
float Height;
} stu;
void setup() {
Serial.begin(115200);
stu stu1;
stu1.name = "xiao";
stu1.age = 12;
stu1.Height = 46.2;
Serial.println(stu1.name);Serial.println(stu1.age);Serial.println(stu1.Height);
}
void loop() {
}
项目使用了 1772 字节,占用了 (5%) 程序存储空间。最大为 30720 字节。
全局变量使用了192字节,(9%)的动态内存,余留1856字节局部变量。最大为2048字节。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7246b0df8f8b476e968b15346a260052.png)
5. typedef struct
定义方式,通过创建指针变量来访问结构体成员变量
typedef struct People {
char *name;
int age;
float Height;
} stu;
void setup() {
Serial.begin(115200);
stu *stu1;
stu1->name = "xiao";
stu1->age = 12;
(*stu1).Height = 46.2;
Serial.println((*stu1).name);Serial.println(stu1->age);Serial.println(stu1->Height);
}
void loop() {
}
项目使用了 1772 字节,占用了 (5%) 程序存储空间。最大为 30720 字节。
全局变量使用了192字节,(9%)的动态内存,余留1856字节局部变量。最大为2048字节。
![在这里插入图片描述](https://img-blog.csdnimg.cn/edbc7c166c354305aec17da31f462dd3.png)
6. 在定义变量时给结构体成员对象全部赋值
struct People {
char *name;
int age;
float Height;
} ;
void setup() {
Serial.begin(9600);
}
void loop() {
People stu = People {"chen",12,46.8};
Serial.println(stu.name);
Serial.println(stu.age);
Serial.println(stu.Height);
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/3ca5fd08d64742e7afc53ab79d10bafe.png)
7.其他注意事项
- 定义在全局里面的结构体,申请变量可以放在全局里面,与定义的结构体对象同级,但是给结构体成员变量赋值的时候,不能同一级赋值,只能在使用的时候,在函数体内赋值。示例:
typedef struct People {
char *name;
int age;
float Height;
}stu;
stu stu2;
void setup() {
Serial.begin(115200);
stu2.name ="chen";
stu2.age = 13;
stu2.Height =48.5;
Serial.println(stu2.name);
Serial.println(stu2.age);
Serial.println(stu2.Height);
}
void loop() {
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/79b75ce9ea464820bc996db3acb03e8d.png)
- 在函数体内定义的结构体,不像在全局里面定义那样有拘束,定义变量是开放的。示例:
void function(){
typedef struct People {
char *name;
int age;
float Height;
}stu;
stu stu2;
stu2.name ="chen";
stu2.age = 13;
stu2.Height =48.5;
Serial.println(stu2.name);Serial.println(stu2.age);Serial.println(stu2.Height);
}
void setup() {
Serial.begin(115200);
function();
}
void loop() {
}
项目使用了 1772 字节,占用了 (5%) 程序存储空间。最大为 30720 字节。
全局变量使用了192字节,(9%)的动态内存,余留1856字节局部变量。最大为2048字节。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6bd2a9ab88634799b5bf18dfe5e31285.png)
- 在定义结构体后面定义,指针变量时,访问成员变量中如果包含指针成员,有可能会出现调用的时候,无法定位边界问题,所以,如果想使用指针变量来访问结构体,最好不要在定义结构后面添加指针变量,可以把指针变量放到函数体内,使用时申请指针变量。(注意申请的指针变量最好不要放到全局里,对结构体指针成员
char *
数据类型读取有问题)
struct People {
char *name;
int age;
float Height;
} ;
void setup() {
Serial.begin(115200);
Serial.flush();
struct People *stu;
stu->age = 12;
stu->Height = 46.2;
stu->name = "chen";
Serial.println(stu->age);
Serial.println(stu->Height);
Serial.println(stu->name);
}
void loop() {
}
项目使用了 1928 字节,占用了 (6%) 程序存储空间。最大为 30720 字节。
全局变量使用了192字节,(9%)的动态内存,余留1856字节局部变量。最大为2048字节。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6c16ddf0a52e43b8800a006bdb2ca390.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)