Arduino struct结构体定义和使用方法详解

2023-05-16

Arduino struct结构体定义和使用方法


1. 直接使用struct定义

  • 示例
 struct People {
  char *name;
  int age;
  float Height;
} ;

void setup() {
  Serial.begin(115200);
 struct People stu1;//注:在Arduino中,这里的`struct`关键字可以省略不写也可以。
  stu1.name = "xiao";
  stu1.age = 12;
  stu1.Height = 46.2;
  Serial.println(stu1.name);
  Serial.println(stu1.age);
  Serial.println(stu1.Height);
}
void loop() {
}

在这里插入图片描述

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字节。

在这里插入图片描述

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字节。

在这里插入图片描述

4. typedef struct定义方式

创建typedef struct别名的方式,调用结构体变量时,通过别名来创建结构体变量,仅仅是在申请变量的时候多了一种对结构体对象的名称多了一种选择。

  • 示例:
typedef struct People {
  char *name;
  int age;
  float Height;
} stu;//注:这里的stu相当于是结构体`People`的别名,不是变量名。

void setup() {
  Serial.begin(115200);
  stu stu1;//调用的时候需要申请变量,然后赋值
//People stu1;//同样也可以使用`People`名称来定义变量。
  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字节。

在这里插入图片描述

5. typedef struct定义方式,通过创建指针变量来访问结构体成员变量


typedef struct People {
  char *name;
  int age;
  float Height;
} stu;//注:这里的stu相当于是`People`的别名,不是变量名。

void setup() {
  Serial.begin(115200);
  stu *stu1;//定义一个指针变量。(调用的时候需要申请变量,然后赋值)
//People *stu1;//同样也可以使用`People`名称来定义变量。
  stu1->name = "xiao";//使用`->`来访问结构体成员变量,也可以写成`(*stu1).name ="chen";'
  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字节。

在这里插入图片描述

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);

}

在这里插入图片描述

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() {
}

在这里插入图片描述

  • 在函数体内定义的结构体,不像在全局里面定义那样有拘束,定义变量是开放的。示例:
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字节。

在这里插入图片描述

  • 在定义结构体后面定义,指针变量时,访问成员变量中如果包含指针成员,有可能会出现调用的时候,无法定位边界问题,所以,如果想使用指针变量来访问结构体,最好不要在定义结构后面添加指针变量,可以把指针变量放到函数体内,使用时申请指针变量。(注意申请的指针变量最好不要放到全局里,对结构体指针成员char *数据类型读取有问题)
 struct People {
  char *name;
  int age;
  float Height;
} ;//注:建议不要将`*stu`结构体变量放在这里。(这里不是`People`的别名!!!)
// struct People *stu; //不要把结构体指针变量放到这里
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字节。
在这里插入图片描述


  生活其实很简单,过了今天即是明天
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Arduino struct结构体定义和使用方法详解 的相关文章

  • 计算机主机接电视机,电脑连接电视,详细教您电脑连接电视当显示器的方法

    现在的科技越来越发达了 xff0c 之前是现在MP4下载好电影或者电视剧 xff0c 然后就可以连接到电视上进行观看 现在不同了 xff0c 现在电脑也可以连接电视了 xff0c 今天小编大大我就负责来告诉你们电脑怎么连接电视当显示器 小编
  • 网易我的世界服务器正在维护,网易《我的世界》Hypixel中国版服务器将停止运营...

    4月16日消息 网易 我的世界 官方现已发布Hypixel中国版服务器停止运营公告 网易表示 xff0c 由于其与Hypixel团队的合作即将到期 xff0c 按照约定将于2020年6月30日10点停止运营Hypixel中国版服务器 届时将
  • 七日杀服务器怎么修改天数,七日杀如何调整天数 | 手游网游页游攻略大全

    发布时间 xff1a 2016 01 21 有这种报错的是硬件加速的问题 调整硬件加速的方法 右键桌面属性 点设置 在设置界面中点高级 然后弹出一个界面 点击疑问解答 然后把硬件加速调到最大 如果还是不能解决可能是软件本身有问题 建议重新安
  • 如何给服务器传输文件,给服务器传输文件

    给服务器传输文件 内容精选 换一换 公有云通常指第三方供应商为用户提供的能够通过Internet使用的云端基础设施和服务 xff0c 其核心属性是共享资源服务 华为云是公有云品牌 xff0c 在SAP系统迁移的过程中 xff0c 您可以单独
  • 服务器架设文件服务器,服务器架设文件服务器

    服务器架设文件服务器 内容精选 换一换 安装完操作系统后的临时云服务器需要进行相关配置 xff0c 并安装原生的XEN和KVM驱动 xff0c 才能保证后续创建的云服务器正常使用 该任务指导用户完成Linux云服务器的相关配置与驱动安装 x
  • 基于YOLOv3的视频中无人机的目标检测(包括CUDA等环境配置)

    在SLAM毫无建树的我又投入了深度学习的大坑 xff0c 由于项目需求需要做无人机的目标检测 xff0c 这里把搭建系统中的一些问题记录下来 xff0c 方便之后复现 系统搭建 采用YOLOv3来进行无人机的检测 xff0c yolo的安装
  • 【CAN】CAN基础概念2

    摘自VECTOR官网E Learning的资料 9 帧类型 数据帧 为传输用户数据 xff0c ISO 11898 1定义了数据帧 数据帧可以传输的最大有效负载为八个字节 xff0c 即数据场 除了数据场 xff0c 数据帧还包括执行CAN
  • 如何设计一个锂电池充电电路(TP4056)

    这个是个单节18650锂电池的充电模块 xff0c 这个是个18650的锂电池 xff0c 18指的是它的直径是18mm xff0c 65指的是它的高度为65mm 这个18650电池的标称电压是3 7V xff0c 电池充满时电压为4 2V
  • 黑马程序员C++系统班学习笔记(一)——Linux操作系统一

    黑马程序员C 43 43 系统班链接 xff1a https www bilibili com video av37403127 from 61 search amp seid 61 5509409937472093685 本笔记旨在记录学
  • ubunbtu下基于c++实现MQTT客户端通信

    文章目录 一 MQTT简介1 1 MQTT 服务器 xff08 Broker xff09 是发布 订阅架构的核心1 2 MQTT 网络协议1 3 服务质量1 4 MQTT 数据包结构1 4 1 MQTT固定头1 4 2 MQTT可变头 Va
  • python 提取页面验证码

    以下代码都使用python 43 selenium 实现 xff0c 请先搭建好开发环境 1 页面的验证码若为静态验证码可以使用截屏的方式获取代码如下 driver save screenshot 39 C crawlerScript pi
  • 基于单片机的GPS开发 (four) GPS基础知识

    一 GPS硬件模块 xff1a VCC xff1a 兼容3 3V和5V GND xff1a 地 TXD xff1a 接51单片机的RXD P3 0 RXD xff1a 可接单片机的TXD P3 1 或者直接悬空 PPS xff1a 时钟脉冲
  • 记录:C++打印堆栈信息并优化打印结果

    1 介绍打印堆栈信息函数 头文件 xff1a span class token macro property span class token directive hash span span class token directive k
  • Ubuntu “无法定位软件包”

    Ubuntu 无法定位软件包 问题描述 xff1a 在使用Ubuntu 18 0 4 安装ceres库时安装依赖项时报错 xff0c 如图所示 xff1a 原因分析 xff1a libcxsparse3 1 2软件包是Ubuntu 14 0
  • NVIDIA Jetson TX2:TX2平台介绍

    一 xff1a TX2平台概述 TX2是快速高效的嵌入式AI计算设备 低功耗 xff08 标准 xff09 模式 xff08 7 5w xff09 xff1b 高功耗模式 xff08 15w xff09 xff0c 性能是TX1的两倍 具有
  • VSCode安装配置C++开发环境

    真相需要去探寻 之前已经在VSCode上配置了Golang的开发环境 xff0c 使用起来还是十分舒服的 xff0c 特别是设置了镜像下载地址和掌握了go mod的使用 xff0c 小巧轻便 xff0c 舒爽流畅 最近要用到C 43 43
  • 图像处理的基本操作(灰度化,二值化)

    基本的概念 xff1a 图像的深度 xff1a 图像中像素点占得bit位数 xff0c 就是图像的深度 xff0c 并不是每个像素点分配了多少位内存空间 xff0c 就一定能够要用完 xff0c 深度仅仅标识用于真真能表示颜色的位数 xff
  • Ubuntu如何切换Python版本

    这几天一直在搞小米官方提供的ESP32 WiFi SDK xff0c 过程中遇到了很多坑 xff0c 其中包括Python版本兼容的问题 xff0c 我的Ubuntu 上安装的Python版本是Python3 xff0c 而脚本的使用的是p
  • C++面试宝典:__FILE__,__func__,__LINE__

    C语言中 xff0c FILE xff0c func xff0c LINE 常用于logout xff0c debug调试 注意 xff1a 其使用不需要定义 xff0c FILE 指示当前文件名 xff0c func 指示当前函数名 xf
  • C++面试宝典:头文件引用的顺序

    头文件引用的顺序 当我们有多个头文件的时候 xff0c 特定情况下要注意引用的顺序 如果要在文件a h中声明一个在文件b h中定义的变量 xff0c 而不引用b h 那么要在a cpp文件中引用b h文件 xff0c 并且要先引用b h x

随机推荐