C语言下结构体、共用体、枚举类型的讲解

主要内容

  1. 结构体
  2. 结构体数组
  3. 结构体指针
  4. 包含结构体的结构
  5. 链表
  6. 链表相关操作
  7. 共用体
  8. 枚举类型

结构体

结构体的类型的概念

                 

结构体实现步骤

结构体变量的声明

struct

struct  结构体名{                                               

     数据类型  成员名1;

     数据类型  成员名2;

     ......

     数据类型  成员名n;

};

struct  stu{

     int  num;

     char  name[20];

     char  sex;

     float  score;

};

结构体变量的定义

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

struct  student  student1,student2;

2.定义类型同时定义变量

struct  结构体名{

     数据类型  成员名1;

     数据类型  成员名2;

     ......

     数据类型  成员名n;

}变量1,...,变量n;

struct Product

{

       char cName[10];    /*产品名称*/

       char cShape[20];    /*形状*/

       char cColor[10];    /*颜色*/

       int iPrice;    /*价格*/

       char cArea[20];    /*产地*/

}product1,product2;    /*定义结构体变量*/

3.直接定义变量

struct {

     数据类型  成员名1;

     数据类型  成员名2;

     ......

     数据类型  成员名n;

}变量1,...,变量n;

struct

{

       char cName[10];    /*产品名称*/

       char cShape[20];    /*形状*/

       char cColor[10];    /*颜色*/

       int iPrice;    /*价格*/

       char cArea[20];    /*产地*/

}product1,product2;    /*定义结构体变量*/

结构体注意事项

结构体变量的引用

结构体类型的初始化

struct Student

{

         char cName[20];

         char cSex;

         int iGrade;

} student1 = {"HanXue","W",3};  /*定义变量并设置初始值*/

结构体数组

结构体数组与数组的区别

相同点:

       结构体数组和数组的定义与引用规则是相同的

不同点:

     结构体数组中的所有元素为结构体变量

     普通数组中的所有元素为基本类型变量

定义结构体数组

struct  结构体名{

     成员列表

}数组名[数组长度];

struct Student  /*学生结构*/

{

       char cName[20];  /*姓名*/

       int iNumber;  /*学号*/

       char cSex;  /*性别*/

       int iGrade;  /*年级*/

} student[5];  /*定义结构体数组*/

struct Student student[5];   /*定义结构体数组*/

struct    /*学生结构*/

{

       char cName[20];  /*姓名*/

       int iNumber;  /*学号*/

       char cSex;  /*性别*/

       int iGrade;  /*年级*/

} student[5];  /*定义结构体数组*/

初始化结构体数组

struct 结构体名{

         成员列表;

}数组名={初始值列表};

struct Student  /*学生结构*/

{

        char cName[20];  /*姓名*/

        int iNumber;  /*学号*/

        char cSex;  /*性别*/

        int iGrade;  /*年级*/

} student[5]={{"WangJiasheng",12062212,'M',3},

   {"YuLongjiao",12062213,'W',3},

   {"JiangXuehuan",12062214,'W',3},

   {"ZhangMeng",12062215,'W',3},

   {"HanLiang",12062216,'M',3}};  /*定义数组并设置初始值*/

结构体指针

指向结构体变量的指针

指向结构体数组的指针

    结构体指针变量不但可以指向一个结构体变量,还可以指向结构体数组,此时指针变量的值就是结构体数组的首地址

    结构体指针变量也可以直接指向结构体数组中的元素,这时指针变量的值就是该结构体数组元素的首地址

结构体作为函数参数

1.使用结构体变量作为函数参数

        void Display(struct Student stu);

2.使用指向结构体变量的指针作为函数的参数

       void Display(struct Student* stu)

3.使用结构体变量的成员作为函数的参数

        Display(student.fScore[0]);

包含结构的结构

struct student  /*学生信息结构*/

{

       char name[30];  /*姓名*/

       int num;  /*学号*/

       char sex[20];  /*性别*/

       struct date birthday;  /*出生日期*/

}student={"苏玉群",12061212,"",{1986,12,6}};  /*为结构变量初始化*/

链表

链表概述

动态内存分配函数

创建动态链表

         所谓建立动态链表就是指在程序运行过程中从无到有地建立起一个链表,即一个一个地分配节点的内存空间,然后输入节点中的数据并建立节点间的相连关系。

链表的相关操作

链表的插入操作

链表的删除操作

共用体

共用体的概念

共用体变量的引用

共用体变量的初始化

        union DataUnion Union={97};

共用体类型的数据特点

枚举类型

枚举类型的概念

枚举类型的定义

      enum  枚举标识符{常量列表}

      enum Colors(Red=1,Green,Blue);

malloc函数

使用指向结构体变量的指结构体ts

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

绝地求生PUBG兰博基尼怎么兑换 兰博基尼怎么获得

绝地求生采用虚幻4引擎制作,玩家们会在一个偏远的岛屿上出生,然后展开一场赢家通吃的生存竞赛,最后只会有1个人存活。当然,和其他生存游戏一样,玩家需要在广袤复杂的地图中收集武器、车辆、物资,而且也会有…

解决win10报“无法加载文件……profile.ps1,因为在此系统上禁止运行脚本”的问题

打开命令行报错 解决方法 使用管理员权限打开PowerShell:WinX, 选择“Windows PowerShell(管理员)” 输入:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned 输入:y确认修改安全策略 :y确认修改安全策略…

探讨大数据在视频汇聚平台LntonCVS国标GB28181协议中的应用

随着摄像头和视频监控系统的普及和数字化程度的提高,视频监控系统产生的数据量急剧增加。大数据技术因其优秀的数据管理、分析和利用能力,成为提升视频监控系统效能和价值的重要工具。 大数据技术可以将视频监控数据与其他数据源进行融合分析&#xff0c…

【elasticsearch】IK分词器添加自定义词库,然后更新现有的索引

进入elasticsearch中的plugins位置,找到ik分词器插件,进入ik插件的config文件夹,当中有一个IKAnalyzer.cfg.xml配置文件。使用vim编辑器修改配置文件: vim IKAnalyzer.cfg.xml 配置文件如下(添加了自定义字典的位置&…

pygame 音乐粒子特效

代码 import pygame import numpy as np import pymunk from pymunk import Vec2d import random import librosa import pydub# 初始化pygame pygame.init()# 创建屏幕 screen pygame.display.set_mode((1920*2-10, 1080*2-10)) clock pygame.time.Clock()# 加载音乐文件 a…

人工智能的新时代:从模型到应用的转变

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

信息技术课堂上如何有效防止学生玩游戏?

防止学生在信息技术课堂上玩游戏需要综合运用教育策略和技术手段。以下是一些有效的措施,可以用来阻止或减少学生在课堂上玩游戏的行为: 1. 明确课堂规则 在课程开始之初,向学生清楚地说明课堂纪律,强调不得在上课时间玩游戏。 制…

使用tcpdump抓取本本机的所有icmp包

1、抓取本机所有icmp包 tcpdump -i any icmp -vv 图中上半部分,是源主机tmp179无法ping通目标主机192.168.10.79(因为把该主机关机了)的状态,注意看,其中有unreachable 图中下半部分,是源主机tmp179可以p…

Docker总结

准备环境: VMware17Ubuntu18.04(LTS):https://releases.ubuntu.com/18.04/ubuntu-18.04.6-desktop-amd64.iso 1. Docker前瞻 docker相关文档: docker官网地址 : https://www.docker.com/docker文档地址 : https://docs.docker.com/docker镜像…

tomcat的优化和tomcat和nginx实现动静分离:

tomcat的优化 tomcat自身的优化 tomcat的并发处理能力不强。大项目不使用tomcat做为转发动态的中间件(k8s集群,python,rubby),小项目会使用(内部使用),动静分离。 优化tomcat的启动…

【Spring Boot】Spring AOP动态代理,以及静态代理

目录 Spring AOP代理一. 代理的概念二. 静态代理三. JDK代理3.1 重写 invoke 方法进⾏功能增强3.2 通过Proxy类随机生成代理对象 四. CGLIB代理4.1 自定义类来重写intercept方法4.2 通过Enhancer类的create方法来创建代理类 五. AOP源码剖析 总结(重中之重,精华) Sp…

一款简单、免费的web文件共享服务器

#共享文件# #远程访问# #手机访问# 文件共享已成为我们日常生活和工作中不可或缺的一部分。它如同一条无形的纽带,将人们紧密地联系在一起,促进了信息的快速传播和交流。 文件共享的魅力在于其打破了地域和时间的限制。无论我们身处世界的哪个角落&…

深度解析:当下流行的人工智能大模型生成逻辑

在过去的几年里,人工智能领域经历了前所未有的革新,其中最引人注目的就是大规模预训练模型的崛起。这些模型,如GPT系列、BERT、T5、DALLE和CLIP等,凭借其强大的语言理解和生成能力,已经在自然语言处理(NLP&…

Springboot使用WebSocket发送消息

1. 创建springboot项目&#xff0c;引入spring-boot-starter-websocket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>完整项目依赖 <?xml ver…

聊聊使用GROUP_CONCAT函数遇到的坑

问题现象 在工作中我们或多或少都会使用到函数group_concat&#xff0c;它可以合并多行的某列(或多列)数据为一行&#xff0c;默认以逗号分隔。 最近碰到了一个线上bug&#xff0c;查询DB时返回的结果信息mysql自动截取了&#xff0c;导致页面显示的时候只显示了前半段结果。 …

MATLAB环境下4种噪声生成

生成噪声包括: 1)粉红色(闪烁)噪声-功率谱密度斜率-3 dB/oct。&#xff0c; - 10db /dec 2)红色(布朗)噪声-功率谱密度斜率-6 dB/oct。&#xff0c; - 20db /dec 3)蓝色噪声-功率谱密度斜率3 dB/oct。&#xff0c; 10db /dec 4)紫色(紫色)噪声-功率谱密度斜率 6db /oct。&…

抖音商城自定义小程序源码系统 前后端分离 带完整的源代码包以及搭建教程

系统概述 在当今数字化时代&#xff0c;电商平台的便捷性和个性化体验成为了吸引用户的关键。随着短视频平台的兴起&#xff0c;抖音作为其中的佼佼者&#xff0c;其商城小程序成为了商家连接消费者的新阵地。为了帮助商家快速构建个性化、高效的小程序店铺&#xff0c;本文将…

Java线程的创建·启动和休眠

一.线程的创建和启动 Java中创建线程的两种方式 ◆继承java.lang.Thread类 ◆实现java.lang.Runnable接口 ◆使用线程的步骤 继承Thread类创建线程 ◆自定义线程类继承自Thread类 ◆重写run()方法&#xff0c;编写线程执行体 ◆创建线程对象&#xff0c;调用start()方法启动…

基于大数据的电商产品评论数据分析与可视化--Python

基于大数据的电商产品评论数据分析与可视化 1绪论 1.1研究背景与意义阐述 随着电子商务领域的迅猛扩张,电商平台累积了海量的用户评价信息。这些建议不只是包含了消费者对产品的评价和经验分享,更重要的是,它们包含了丰富且价值巨大的信息。深度分析在线用户反馈不仅揭示…

#数据结构 链表

单向链表 1. 概念 单向链表 单向循环链表 双向链表 双向循环链表 解决&#xff1a;长度固定的问题&#xff0c;插入和删除麻烦的问题 1、逻辑结构&#xff1a; 线性结构 2、存储结构&#xff1a; 链式存储 链表就是将 结点 用链串起来的线性表&#xff0c;链就是 结点 中的…