C语言 | 结构体

news2024/12/23 22:26:18

C语言 | 结构体

文章目录

  • C语言 | 结构体
    • C语言结构体详解:
    • 1.实例(多重嵌套)
      • 1-1.定义
      • 1-2.初始化
    • 2.结构体
      • 2-1、结构体
        • 2-1-1、结构体的类型定义:
        • 2-1-2、结构体变量的定义:
        • 2-1-3、结构体变量的初始化:
        • 2-1-4、使用:
        • 2-1-5、结构体数组:
        • 2-1-6、结构体指针:

C语言结构体详解:

http://c.biancheng.net/c/100/

1.实例(多重嵌套)

1-1.定义

在这里插入图片描述

#define DEV_SERIAL_NUM_MAX_LEN      (11)
#define PWD_MANAGER_MAX_LEN         (11)
#define PWD_PLAYER_MAX_LEN          (11)

#define DEVICE_ID_STR_MAX_LEN       (12)
#define DEP_NAME_STR_MAX_LEN        (32)
#define DEPT_ID_STR_MAX_LEN         (12)
#define USER_NAME_STR_MAX_LEN       (32)
#define USER_ID_STR_MAX_LEN         (12)

#define CHECK_ERR_TIME_MAX_LEN      (32)

#define CARD_LABEL_NAME_MAX_LEN     (DEVICE_ID_STR_MAX_LEN*2)

#define BLOCK_SPM_MAGIC_HEAD        MAKEFOURCC('S', 'P', 'M', ' ') //(0x53504D20)  // "SPM "
#define BLOCK_SPM_MAGIC_TAIL        MAKEFOURCC('T', 'Q', 'O', ' ') //(0x54514F21)  // "TQO "

#define BLOCK_SERN_MAGIC_HEAD       MAKEFOURCC('S', 'E', 'R', 'N') //(0x5345524E)  // "SERN"
#define BLOCK_SERN_MAGIC_TAIL       MAKEFOURCC('T', 'G', 'S', 'O') //(0x5446534F)  // "TGSO"

#define CHECK_ERR_WHEN_POWER_ON              (0xA100)
#define CHECK_ERR_WHEN_SETTING_BY_TOOLS      (0xA200)

#define DEF_DEVICE_ID               "DEMO"
#define DEF_DEV_CAM_PWR_MANAGER     "000000"

typedef enum _DEVICE_INFO_TYPE_{
    DEVICE_INFO_SERIALNUM = 0,
    DEVICE_INFO_PWRCAMMANAGER,
    DEVICE_INFO_PWRPLAYER,
    DEVICE_INFO_DEVID,
    DEVICE_INFO_DEPTNAME,
    DEVICE_INFO_DEPTID,
    DEVICE_INFO_USERNAME,
    DEVICE_INFO_USERID,
    DEVICE_INFO_CHECKERRTIME,
    DEVICE_INFO_MAGIC,
    DEVICE_INFO_TYPE_IDMAX,
}DEVICE_INFO_TYPE;

typedef struct _DEVICE_INFO_{
    CHAR DeviceSerialNumFlag;
    CHAR DeviceSerialNum[DEV_SERIAL_NUM_MAX_LEN];
    CHAR PWDManagerFlag;
    CHAR PWDManager[PWD_MANAGER_MAX_LEN];           // 执法记录仪管理工具密码
    CHAR PWDPlayerFlag;
    CHAR PWDPlayer[PWD_PLAYER_MAX_LEN];             // 播放器密码
}DEVICE_INFO, *pDEVICE_INFO;

typedef struct _USER_INFO_{
	CHAR DeviceID[DEVICE_ID_STR_MAX_LEN];   // 产品序号
	CHAR DeptName[DEP_NAME_STR_MAX_LEN];    // 使用单位
	CHAR DeptID[DEPT_ID_STR_MAX_LEN];       // 单位编号
	CHAR UserName[USER_NAME_STR_MAX_LEN];   // 用户名称
	CHAR UserID[USER_ID_STR_MAX_LEN];       // 用户名称
}USER_INFO, *pUSER_INFO;

typedef struct _CHECK_INFO_{
    UINT16 CheckErrType;                    // //0xA100: by pc tools  0xA200: by poweron init
    CHAR CheckErrTime[CHECK_ERR_TIME_MAX_LEN];
}CHECK_INFO, *pCHECK_INFO;

typedef struct _synPermissionsManagement_{
    UINT32 magic_head;

	DEVICE_INFO DeviceInformation;
	USER_INFO UserInformation;
    CHECK_INFO CheckInformation;

	UINT32 magic_tail;
}SynPermissionsManagement, *pSynPermissionsManagement;

//========================================================================================
#define  PS_USRINFO_CALI                    "USER"
#define  USRINFOCALI_VERIFICATION           MAKEFOURCC('U','S','E','R') // 0x52455355

typedef struct _USER_INFO_PACKAGE_{
    SynPermissionsManagement Data;
    UINT32 uiVerifyCode;
    UINT32 uiUserInfoSize;
}USER_INFO_PACKAGE,* pUSER_INFO_PACKAGE;

1-2.初始化

static USER_INFO_PACKAGE UserInfoPackage = {
    .Data = {
        .magic_head = BLOCK_SPM_MAGIC_HEAD,

        .DeviceInformation = {
            .DeviceSerialNumFlag = 0,
            .DeviceSerialNum = "DEMO",
            .PWDManagerFlag = 0,
            .PWDManager = "000000",
            .PWDPlayerFlag = 0,
            .PWDPlayer = "000000",
        },

        .UserInformation = {
            .DeviceID = "DEMO",
            .DeptName = "",
            .DeptID = "",
            .UserName = "",
            .UserID = "",
        },

        .CheckInformation = {
            .CheckErrType = 0,
            .CheckErrTime = "",
        },

        .magic_tail = BLOCK_SPM_MAGIC_TAIL,
    },
    .uiVerifyCode = USRINFOCALI_VERIFICATION,
    .uiUserInfoSize = sizeof(USER_INFO_PACKAGE),
};

2.结构体

2-1、结构体

它是一种复合的数据类型,它是由多个不同类型的数据组成的集合,这些不同类型的数据称为该结构体的成员
在C语言中没有给出结构体这种类型具体的形式(名称),但是给出类定义该结构体类型的方法(格式),在使用结构体类型时,必须先定义结构体具体的类型然后用定义好的类型来定义变量进而使用变量
综上,结构体是一种自定义的复合数据类型,在结构体空间中每个成员都有各自的空间

2-1-1、结构体的类型定义:

在这里插入图片描述

2-1-2、结构体变量的定义:

在这里插入图片描述

2-1-3、结构体变量的初始化:

1》完全初始化:按定义成员的先后顺序依次给结构体变量中的每一个成员赋值的过程
struct student st = {1001,"刘德华",1.80,99.9};
2》部分初始化:按定义成员的先后顺序依次给结构体变量中的前若干个成员赋值的过程
struct student st = {1001,"刘德华",1.80};
3》指定成员初始化:不按成员的定义顺序赋值,而是指定结构体变量中的某一些成员赋值的过程
struct student st3 = {.name="刘德华",1.80,.sno=1001}; //指定成员初始化

2-1-4、使用:

1》不能只能赋值,例如:
struct student st;
st = {1001,"刘德华",1.80,99.9}; //错误的
2》相同类型结构体变量之间可以相互赋值,例如:
struct student st1 = {1001,"刘德华",1.80,99.9};
struct student st2;
st2 = st1; //正确的
3》结构体中的成员只能单独使用,例如:

在这里插入图片描述

2-1-5、结构体数组:

元素为结构体类型的数组称为结构体数组。

在这里插入图片描述

2-1-6、结构体指针:

指向结构体变量的指针称为结构体指针。

在这里插入图片描述

结构体变量与结构体指针的关系:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【夜莺(Flashcat)V6监控】1初识夜莺:介绍及部署

简介 夜莺( Nightingale )是一款国产、开源云原生监控分析系统(从 v6 版本开始,尝试转型成为统一观测平台),集数据采集、可视化、监控告警、数据分析于一体。于 2020 年 3 月 20 日,在 github …

这就是阿里巴巴月薪20K+测试岗的面试题吗?让我这个3年的测试工程师看的冷汗直流.....

朋友入职已经两周了,整体工作环境还是非常满意的!所以这次特意抽空给我写出了这份面试题,而我把它分享给伙伴们,面试&入职的经验! 大概是在2月中的时候他告诉我投递了阿里巴巴并且简历已通过,2月23经过…

NPM 包管理器简介

目录 npm 简介 包(Packages) 更新包 版本控制 运行任务 npm 简介 npm 是 Node.js 的标准包管理器。 npm 的快速指南,强大的包管理器是 Node.js 成功的关键。2017 年 1 月,超过 350000 个软件包被报告在 npm 注册表中列出&a…

java中的Servlet对象生命周期以及过滤器监听器

review: Servlet生命周期中的初始化方法: init() , init(config) public void init(ServletConfig config) throws ServletException { this.config config ; init(); } 因此,如果我们需要在初始化时执行一些自定义的操作,那么我…

简单易用又功能强大,来看看Postman接口测试工具怎么用?

一、Postman介绍 Postman官网上这样介绍它:"Manage all of your organizations APIs in Postman, with the industrys most complete API development environment."看的出来Postman是功能强大的API测试的工具 Postman 提供功能强大的 Web API 和 HTTP 请求的调试&a…

【C++】 类练习---封装链表、人物移动

目录 前言 正文 结构体和类的区别 练习1:封装链表 用类封装链表的注意事项 定义一个链表的节点结构 链表类代码 主函数 运行结果 练习2:人物移动 说明 头文件以及宏 人物类 主函数 运行结果 结语 前言 在学完了【C】 类基础汇总&#x…

Java多线程---线程的创建(Thread类的基本使用)

本文主要介绍Java多线程的相关知识, Thread的创建, 常用方法的介绍和使用, 线程状态等. 文章目录 前言 一. 线程和Thread类 1. 线程和Thread类 1.1 Thread类的构造方法 1.2 启用线程的相关方法 2. 创建第一个Java多线程程序 3. 使用Runnable对象创建线程 4. 使用内部类…

【Java笔试强训 31】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥美国节日…

数组传参不理解?(数组传参的本质)

在我们编写程序时,经常需要传递参数给函数,其中一种常见的参数类型就是数组。数组作为一种数据结构,可以存储多个相同类型的数据元素,并按照一定的顺序排列。在函数中传递数组参数,可以方便地对数组进行操作处理。但是…

StarCoder - 源代码大模型

StarCoder 是一种在源代码和自然语言文本上训练的语言模型 (LM)。 它的训练数据包含 80 多种不同的编程语言以及从 github 问题和提交以及笔记本中提取的文本。 StarCoder 是在 github 代码上训练的,因此它可以用来执行代码生成。 更准确地说,模型可以完…

手术麻醉系统源码——业务流程介绍

采用计算机和通信技术,实现监护仪、麻醉机、呼吸机、输液泵等设备输出数据的自动采集,采集的数据能够如实准确地反映患者生命体征参数的变化,并实现信息高度共享,根据采集结果,综合其他患者数据,自动生成手…

在springboot项目中配置数据库下划线命名映射为java的驼峰命名时出错

问题 在使用spirngboot集成mybaits的时候,想要开启命名映射,如图配置 # mybatis配置 mybatis:type-aliases-package: com.zhong.springcloud.pojoconfig-location: classpath:mybatis/mybatis-config.xmlmapper-locations: classpath:mybatis/mapper/*…

4年外包出来,5次面试全挂....

我的情况 大概介绍一下个人情况,男,毕业于普通二本院校非计算机专业,18年跨专业入行测试,第一份工作在湖南某软件公司,做了接近4年的外包测试工程师,今年年初,感觉自己不能够再这样下去了&…

深入理解二分类和多分类CrossEntropy Loss和Focal Loss

深入理解二分类和多分类CrossEntropy Loss和Focal Loss 二分类交叉熵 在二分的情况下,模型最后需要预测的结果只有两种情况,对于每个类别我们的预测得到的概率为 p p p和 1 − p 1-p 1−p,此时表达式为( 的 log ⁡ \log log底数…

如何用ChatGP协助你,从品牌角度对产品提出升级建议?

该场景对应的关键词库(19个): 品牌洋葱图思维模型、产品信息、人群、品类、属性、体验、差异化特征、功效、品牌价值主张、目标用户、需求、痛点、爽点、消费者、外观、功能、结构、产品优化建议、产品开发可行性。 提问模板(3个&#xff09…

《Vue.js 设计与实现》—— 01 权衡的艺术

书籍链接:https://weread.qq.com/web/bookDetail/c5c32170813ab7177g0181ae 框架设计里到处都体现了权衡的艺术。 当我们设计一个框架时,框架本身的各个模块之间并不是相互独立的,而是相互关联、相互制约的。 作为框架设计者,一…

Windows10安装免安装版redis

下载 官方下载地址:github.com/MicrosoftAr…选择版本 解压安装 配置环境变量&注册成服务 配置环境变量 以管理员启动命令行,在redis安装根目录,把redis注册服务 redis-server --service-install redis.windows-service.conf --lo…

Communications chemisty|德睿智药工作-用于分子性质预测的药物约束异构图Transformer模型

德睿智药的分子性质预测任务 题目: Pharmacophoric-constrained heterogeneous graph transformer model for molecular property prediction 文献来源:COMMUNICATIONS CHEMISTRY | (2023) 6:60 | 代码:https://github.com/stardj/PharmHG…

springboot+dubbo+zookeeper 项目实战

现在有一段代码再前台,后台系统中都存在,都需要这段代码,存在这种情况,我们可以选择将这段代码提取出来作为一个服务,让前台和后台系统作为消费者远程调用这段代码,提高了代码的复用性。 springboot集成dub…

Unity Audio -- (2)创建动态音效

评估场景需求 本节的目标是添加脚步声到角色身上,当角色走路时,触发动画事件并播放声音。 脚步声是我们在真实世界中常常被我们所忽视的声音,但脚步声能够传达出许多环境信息。你现在可以花一小段时间绕着你周围的环境走一走并仔细听听脚步声…