c语言结构体(嵌入式开发)

C语言结构体与联合体完全指南:从原理到嵌入式开发实战 在C语言中,结构体是构建复杂数据类型的基石。// 学生姓名// 学号float gpa;// 平均绩点// 所属院系封装相关数据项实现数据层次的抽象构建复杂数据结构的基础单元。 阅读详情

1.结构体

1).定义

用户自定义的数据类型,结构体中可以包含若干不同数据类型的成员变量,也可以数据类型相同,使这些数据组合起来反映一个信息。

2).格式

struct 结构体名 {

数据类型 成员变量名;

数据类型 成员变量名;

.

.

.

数据类型 成员变量名;

};

3).结构体变量

  1. 概念:通过结构体类型定义的变量

  2. 格式:

    1. 先定义结构体,再定义结构体变量

      struct 结构体名 变量名;

      struct student
      {
          int id;
          int age;
          float score;
          int number;
      };
      struct student stu1;
      
    2. 定义结构体的同时定义结构体变量

      struct student
      {
          int id;
          int age;
          float score;
          int number;
      }stu,stu1;
      
    3. 缺省结构体名定义变量

      struct
      {
          int id;
          int age;
          float score;
          int number;
      }stu1;
      

4).赋值

  1. 定义的同时用{}赋值

    struct student
    {
        int id;
        int age;
        float score;
        int number;
    };
    struct student stu1= {1,23,60,123456};
    
  2. 定义完变量,单独赋值

    struct student
    {
        int id;
        int age;
        float score;
        int number;
    };
    struct student stu1;
    stu1.id = 2;
    stu1.age = 23;
    
  3. 点等法赋值

    struct student
    {
        int id;
        int age;
        float score;
        int number;
    };
    struct student stu1={
    	.id = 2;
    	.age = 20;
    }
    

5).访问

通过 . 访问:变量名.成员变量

补充:typedef int size_t;

  1. 定义结构体同时重定义

    typedef struct student
    {
        int id;
        int age;
        float score;
        int number;
    }STU;
    STU stu1;
    
  2. 先定义结构体,再重定义

    struct student
    {
        int id;
        int age;
        float score;
        int number;
    };
    typedef struct student STU;
    

2.结构体数组

  1. 概念:具有相同结构体类型的变量组成结构体数组

  2. 定义的格式:

    1. 定义结构体的同时,定义数组

      struct student
      {
          int id;
          int age;
          float score;
          int number;
      }stu[5];
      
    2. 先定义结构体,再定义数组

      struct student
      {
          int id;
          int age;
          float score;
          int number;
      };
      struct student stu[5];
      
  3. 赋值

    1. 定义数组的同时赋值

      struct student
      {
          int id;
          int age;
          float score;
          int number;
      };
      struct student stu[5] = {
      {1,20,30.2},{2,22,40.6},{3,5,10},{4,56,32},{5,80,100}
      }
      
    2. 先定义,后赋值

      struct student
      {
          int id;
          int age;
          float score;
          int number;
      }stu[5];
      stu[0].id=1;
      stu[0].age = 100;
      stu[0].score = 0;
      
  4. 结构体数组大小

    sizeof(struct student)*元素个数

3.结构体指针

  1. 概念:指向结构体变量的指针

  2. 定义格式:
    struct 结构体名 *指针名;

    struct student
    {
        int id;
        int age;
        float score;
    }stu;
    struct student  *  p = &stu;
    
  3. 赋值

    格式:

    指针名->成员变量名

    p->id = 1;

  4. 结构体指针的大小
    sizeof( p )=4

嵌入式开发中,C语言结构体详解 1 概述   C语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级语言中记录。   声明一个结构休类型的一般形式如下:   struct 结构体名   {成员列表};   结构体名,用作结构体类型的标志,它又称 结构体标记,大括号内是该结构体中的各个成员,由它们组成一个结构体,对各成员都应进行类型声明如:   类型名 成员名;   也可以把 成员列表称为 域表,第一个成员. 阅读详情

相关推荐

C语言枚举、结构体与联合体在嵌入式开发中的高级应用

枚举(enum)、结构体(struct)和联合体(union)是C语言中三种核心的复合数据类型,它们在嵌入式系统开发中扮演着关键角色。枚举通过命名常量提升代码可读性,其底层实现为整型数值,支持显式赋值以应对硬件寄存器配置等场景。结构体用于组织相关数据,通过内存对齐优化可显著提升访问效率,而位域技术则能实现精细的内存控制。联合体允许多种数据类型共享同一内存空间,特别适用于寄存器访问、数据转换和协议解析等场景。在嵌入式开发实践中,这三种数据类型的组合使用能够有效解决状态机实现、硬件寄存器映射等复杂问题,同时通过

weixin_30924087的博客 716

C语言结构体在嵌入式开发中的工程化应用与陷阱规避

结构体是C语言中用于组织异构数据的核心复合类型,其本质是编译期确定的内存布局蓝图,兼具类型安全与硬件级内存可控性。它通过成员命名访问实现语义清晰的数据封装,区别于数组的同质连续存储,在嵌入式系统中广泛应用于外设寄存器映射、通信协议帧定义、驱动配置管理等场景。正确使用结构体指针可避免栈拷贝开销,而字节对齐控制(如#pragma pack)、联合体嵌套、指定初始化器等技术则直接决定跨平台通信可靠性与资源效率。本文深入剖析结构体三阶段生命周期及在STM32、ESP32等典型平台的实战规范。

weixin_42389113的博客 659

C 语言 「值传参」「指针传参」「结构体传参」 三者核心区别(嵌入式开发必懂,含传参本质 + 效率 + 场景 + 坑点)

✔ 定义函数形参为基础数据类型(int/char/short/float/uint8_t/uint16_t等),调用时传入变量本身。// 形参是基础类型x,实参传变量a// 调用int a = 5;func(a);✔ 核心原理调用函数时,把「实参变量的数值」拷贝一份 给形参,形参和实参是 内存中两块完全独立的地址。✔ 核心特点✅ 优点:语法最简单、内存开销极小(最多 4 字节)、绝对安全,函数内修改形参,完全不会影响主调函数的实参原值;

2402_83157621的博客 1513

result在c语言的作用,嵌入式开发中,C语言位结构体用途详解

原标题:嵌入式开发中,C语言位结构体用途详解在嵌入式开发中,经常需要表示各种系统状态,位结构体的出现大大方便了我们,尤其是在进行一些硬件层操作和数据通信时。但是在使用位结构体的过程中,是否深入思考一下它的相关属性?是否真正用到它的便利性,来提高系统效率?下面将进行一些相关实验(这里以项目开发中的实际代码为例):1.位结构体类型设计[cpp] view plain copy print?1. //d...

weixin_39953481的博客 2256

对嵌入式开发C语言结构体的一点总结

今天冬至居然不上班,公司的良心啊!这回有心情写博客和日志了,好了,废话不多说。直接看下文: 鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少。话说,基础什么的比你会更牛逼的算法更重要,基础不牢,地动山摇!!最本质的东西就是基础,不要学到越高级的东西却忘了最本质的东西,这样就失去了学习的意义。 接下来我将对结构体最基础的东西,如何初始化,如果打印信息做一个最基础的总结,当然结构体在内核中到

Bruce.yang的嵌入式之旅 3393

学习笔记7--激光雷达标定

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》,笔者不是自动驾驶领域的专家,只是一个在探索自动驾驶路上的小白,此系列丛书尚未阅读完,也是边阅读边总结边思考,欢迎各位小伙伴,各位大牛们在评论区给出建议,帮笔者这个小白挑出错误,谢谢! 此专栏是关于《自动驾驶汽车环境感知》书籍的笔记。 2.激光雷达标定 2.1 概述 激光雷达内参标定:内部激光发射器坐标系与雷达本

FUXI_Willard 8026

C语言结构体与联合体:嵌入式开发必备的5个设计模式

在嵌入式开发领域,C语言凭借其高效、灵活以及对硬件的直接控制能力,成为了开发者们的首选语言。而结构体和联合体作为C语言中重要的数据类型,在嵌入式系统的设计与实现中发挥着至关重要的作用。它们可以帮助开发者组织和管理数据,提高代码的可读性和可维护性。本文将详细介绍嵌入式开发中基于C语言结构体与联合体的5个必备设计模式。

星辰夜语的博客 1088

手把手教你实现阿克曼ROS小车的运动控制

本文详细介绍了如何从零开始实现阿克曼ROS小车的运动控制。内容涵盖硬件搭建、STM32底层PID速度与舵机控制、ROS层阿克曼运动学模型解析,以及上下位机通信协议设计。通过手把手的代码示例和调试步骤,帮助机器人爱好者与开发者掌握将高级速度指令转化为小车具体动作的全流程,实现流畅的阿克曼转向控制。

weixin_29193259的博客 198

嵌入式开发学习日志18——C语言之结构体

结构体的原始数据会被拷贝一份之后传入到相应的函数中,缺点也很直观,太大了。num作为整型数据是首个成员,因此占据0-3共四个字节,字符指针name固定8个字节,需要对齐到8的整数倍,也就是16字节,最后整形数据age也要对齐8的整数倍,由20对齐为24,所以最后整个结构体的大小为24个字节。在之前数组的章节中提到,数组可以包含相同数据类型的变量或者指针,但是如果我想要将不同数据类型的数据进行统一的管理,光靠数组肯定是做不到的,此时我们就要用上结构体这个强大的自定义数据类型了,这也是结构体的意义所在。

A9better的博客 289

REST-meta-MDD Data总结

sMRI数据使用:nwc1、nwc2、nwc3(同样数据集相关论坛中有相关信息指向需要使用wc1、wc2、wc3)多方咨询与讨论后决定使用nwc数据,这里说明wc数据相对wc数据要大的多如wc1的大小为1.33GB,而nwc1的数据却有6.90GB。VBM文件:/REST-meta-MDD/Sharing/REST-meta-MDD-VBM- phase1 -Sharing.tar.gz。1、Excel中的表型信息:1-男,2-女;-9999或空白表示缺少数据。

2404_88295660的博客 1532

【论文笔记】Reaching agreement in the presence of faults (EIG)

1 问题定义 2 交互一致性 3 单点故障 m=1 n=4 4 多点故障(n>=3m+1) 计算过程 m=2 n=7 5 n<3m+1不能达成协定 6 带认证的算法 7 总结 这篇论文在1980年发表,是1982年著名的拜占庭将军问题论文的前身。作者Leslie Lamport是2013图灵奖得主,两篇论文引用次数分别为5000+和2000+。该论文提出的算法现在被...

zjwreal 2994

C语言结构体在嵌入式开发中的高效应用

结构体是C语言中组织复杂数据的基础数据结构,通过内存连续存储特性实现高效数据管理。其核心原理是将不同类型的数据成员打包成单一实体,既保证数据关联性又提升访问效率。在嵌入式开发中,结构体与硬件寄存器映射、通信协议帧结构天然契合,特别适合处理传感器数据包和Modbus等工业协议。通过位域优化、内存对齐控制等技巧,能在资源受限环境中实现极致性能。典型应用场景包括:硬件寄存器访问、网络协议解析、面向对象模拟等。本文以STM32 GPIO寄存器映射和智能家居温湿度监测为例,展示结构体在嵌入式系统的工程实践。

weixin_34310369的博客 434

【AI智能体】Coze 搭建个人旅游规划助手实战详解

本文将详细介绍如何使用Coze平台搭建个人旅游规划助手。首先概述了AI智能体如何简化传统复杂任务的开发流程,然后重点介绍了Coze工作流的作用和核心节点类型(包括大模型、插件、知识库等)。通过实际操作演示,从创建智能体到配置多级工作流,逐步实现旅游规划功能:解析用户输入时间地点、查询必玩景点、获取景点详细信息等。该教程展示了如何利用Coze的可视化编排能力,即使非技术人员也能快速构建专业级AI应用。最终呈现的旅游助手可提供天气查询、行程建议等一站式服务。

Hello, New World! 2110

C语言结构体内存对齐原理与实践:嵌入式开发与性能优化指南

内存对齐是计算机体系结构中的基础概念,指数据在内存中的存储地址需要满足特定边界要求。其原理源于CPU的内存访问机制,现代处理器通常以字长(如4字节或8字节)为单位读取数据,对齐访问可在一个时钟周期内完成,而非对齐访问则需要多次读取和拼接操作。这种机制的技术价值在于显著提升内存访问效率,减少CPU等待时间,同时避免在某些硬件架构上引发总线错误。在工程实践中,内存对齐广泛应用于嵌入式系统开发、网络协议解析、硬件寄存器映射等场景,特别是在ARM Cortex-M、DSP等处理器上,正确的对齐能防止程序崩溃。本文通

weixin_29574585的博客 294

FIddler+Proxifer 实现PC客户端抓包详细教程

FIddler+Proxifer 实现PC客户端抓包详细教程

森明帮大于黑虎帮的博客 1万+

芒果YOLO11改进176:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

芒果YOLO11改进186:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2131

c语言位结构体,嵌入式开发中,C语言位结构体用途详解

原标题:嵌入式开发中,C语言位结构体用途详解在嵌入式开发中,经常需要表示各种系统状态,位结构体的出现大大方便了我们,尤其是在进行一些硬件层操作和数据通信时。但是在使用位结构体的过程中,是否深入思考一下它的相关属性?是否真正用到它的便利性,来提高系统效率?下面将进行一些相关实验(这里以项目开发中的实际代码为例):1.位结构体类型设计[cpp] view plain copy print?1. //d...

weixin_29143935的博客 441

大模型——CoPaw:阿里云通义推出的个人智能体工作台,让 AI 助理真正落地

阿里云通义实验室于2026年2月发布CoPaw个人智能助理,采用"本地+云端"双部署模式,支持多平台接入和技能扩展。该产品基于AgentScope多智能体生态构建,具备极简部署、长期记忆系统和灵活的技能插件体系三大核心特性。用户可通过简单命令快速安装,并通过记忆文件系统实现个性化交互体验。CoPaw还支持钉钉、飞书等主流平台接入,并开源了模块化架构,允许本地模型接入。技术架构采用多频道对话网关与可插拔Skills系统,为用户提供真正的AI助理服务体验。

2132

C语言结构体在嵌入式开发中的应用与实践

结构体是C语言中组织复杂数据结构的基础工具,通过内存偏移计算实现成员访问。在嵌入式系统开发中,结构体常用于硬件寄存器映射、通信协议封装等场景,其指针操作和动态内存管理需要特别注意资源分配与释放。位域结构体设计能精确控制内存布局,特别适合底层寄存器操作。结合typedef类型重定义,可以提升代码可读性和可维护性。本文通过传感器数据采集、设备驱动开发等实例,展示结构体在嵌入式领域的典型应用。

weixin_35756892的博客 64

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

嵌入式开发必备:C语言匿名联合体/结构体的实战应用与避坑指南

本文深入探讨了C语言匿名联合体与匿名结构体在嵌入式开发中的实战应用。通过解析通信协议、映射寄存器位域及模拟面向对象编程等场景,展示了其如何提升代码简洁性与表达力。文章重点提供了针对ARMCC、IAR、GCC等主流编译器的兼容性解决方案与避坑指南,帮助开发者安全、高效地运用这一特性。

v4w5x6的博客 500

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

c语言对嵌入式的作用,嵌入式开发中C语言中结构体解读2016

嵌入式开发中C语言中结构体解读2016嵌入式开发C语言中的结构体你了解了吗?如果不了解,请跟yjbys小编一起来看看吧!希望能帮助到大家!C语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级语言中记录。声明一个结构休类型的一般形式如下:struct 结构体名{成员列表};结构体名,用作...

weixin_42634811的博客 261

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C语言结构体与位段:内存布局、硬件映射与嵌入式开发实战

在C语言编程中,内存管理是连接高级逻辑与底层硬件的核心。理解内存对齐原理是高效利用内存的基础,它决定了数据在内存中的布局,直接影响程序的性能和正确性。这一技术价值在于能够精准描述复杂数据结构,并直接映射硬件寄存器,从而在资源受限的嵌入式系统中实现高效操控。应用场景广泛,包括嵌入式系统开发、通信协议解析和硬件寄存器访问。本文聚焦于结构体和位段这两个关键特性,它们作为内存的‘雕刻刀’,是进行紧凑数据打包和底层硬件交互的利器。通过深入剖析内存对齐机制和位段操作,开发者可以规避常见陷阱,编写出既高效又易于维护的C代

weixin_29189381的博客 311

嵌入式开发必备:C语言匿名联合体/结构体的5个实战技巧(附MDK配置指南)

本文深入解析了C语言匿名联合体与结构体在嵌入式开发中的5个核心实战技巧,涵盖数据解析、协议处理与状态机设计等场景。通过具体代码示例,详细说明了如何利用匿名结构体简化数据访问,并提供了针对Keil MDK等编译器的关键配置指南,帮助开发者提升代码效率与可维护性。

l1k9j8h7g6的博客 193

嵌入式开发必看:用#pragma pack和__attribute__优化C语言结构体,节省宝贵内存

本文深入探讨了嵌入式开发中C语言结构体的内存优化技术,重点介绍了`#pragma pack`和`__attribute__((packed))`的使用方法及其在STM32、ESP32等硬件平台上的实际效果。通过真实案例和性能测试数据,展示了如何在不同场景下平衡内存占用与访问效率,帮助开发者节省宝贵内存资源。

weixin_33695082的博客 512
上一篇: C语言函数专题(嵌入式学习)
下一篇: 虚拟机网络配置
Immerzu
博客等级 码龄7年 7粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值