C语言学习笔记 Day13(复合类型/自定义类型)

news2024/9/20 20:37:58

Day13 内容梳理:

目录

Chapter 9  复合类型(自定义类型)

9.1 结构体

(1)结构体变量定义、初始化

(2)嵌套结构体

(3)结构体赋值

(4)结构体和指针

(5)结构体做函数参数

9.2 共用体(联合体)

9.3 枚举

9.4 typedef 关键字


Chapter 9  复合类型(自定义类型)

9.1 结构体

有时需要将不同类型的数组组合成一个整体,比如学生的学号/姓名/性别/年龄等等。单独定义比较繁琐,所以可以用结构体表示,如下:

int stuNum;

char name[20];

char gender;

int age;

(1)结构体变量定义、初始化

一般将结构体的定义写在头文件中,这样每次导入头文件都无需重新定义结构体。

以student及其可能包含的内容为例,一下是定义变量的格式:

初始化变量并赋值一共有3种方法:

        ①逐个调用然后赋值:变量.变量名 = 值;

        ②直接赋值:单个变量 = {值1, 值2……};

        ③结构体名{

                变量1  值1;

                变量2  值2;

            }

;如果是字符串数组,需要通过strcpy_s(结构体变量.变量名, "值")来赋值。

strcpy_s()函数属于<string.h>库,记得在开头加上#include<string.h>

(2)嵌套结构体

比如游戏中的人物信息和技能信息:

(3)结构体赋值

初始化一个结构体变量后,若使另一个结构体变量等于它,则两个都是独立的、互不干扰的。

(4)结构体和指针

可以用指针去打印成员变量。

“结构体指针->成员”这个形式等同于“结构体变量.成员”

(5)结构体做函数参数

①结构体的普通变量做函数参数:

void funct01(struct student temp){
    //内容
}

②结构体的指针变量做函数参数:

void funct02(struct student* p){
    //内容
}

③结构体数组做函数参数:

与指针相比,参数列表多一个数组长度参数length。

void funct03(struct student arr, int length){
    //内容
}

④const修饰结构体指针形变参量

struct student* const p可以改变指针的指向,但改不了所指向内容的值。

void funct04(struct student* const p){
    //可改变指针指向,但不可改变所指向的内容
}

而const struct student* p能改变所指向内容的值,但改变不了指针指向。

void funct05(const struct student* p){
    //可改变内容,不可改变指向
}

9.2 共用体(联合体)

共用体(union)也叫“联合体”,是能在同一存储不同类型数据的类型,其所占的内存长度等于其最长成员的长度倍数(类似最大公倍数)。

共用体变量中,起作用的成员是最后一次存放的成员。每存入一个新成员,原有成员的值就被会覆盖。共用体变量的地址和它自己各成员的地址都是同一个,

下图中,先将int a赋值为100,打印正常。

再将float b赋值为5.5,发现int a的值变味了乱码证明联合体所有变量共享同个地址:

打印共用体各个变量的地址,发现都相同:

9.3 枚举

一一列举出来所有变量的值,而且变量的取值仅限于列举出的这些。

枚举类一般配合switch语句使用,常用于控制流程。

定义格式:

enum 枚举类的名字{
    枚举值列表
};

枚举值是常量,无法在程序中用赋值语句再次赋值。可以规定值,也可以不规定,如下:

 规定值之后就按照值来,输入1打印MON:

不规定值的话,就会像数组一样按下标来跳转,下图中输入1打印TUE而非MON:


 

9.4 typedef 关键字

用途:围殴一种已存在的数据类型(基本类型或自定义的类型)起一个新名字。它不能被用于创建新的类型。

和#define的区别:

typedef仅限于数据类型,无法用在表达式或具体的值上。

另外,#define发生在预处理阶段,而typedef发生在编译阶段。

还有一点需注意,用typedef关键字起的别名是淡蓝色的,而变量都是黑色的。

给变量的数据类型起别名,例子:

给结构体的数据类型起别名,例子:

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

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

相关文章

C Primer Plus 第4章习题

你该逆袭了 红色标注的是&#xff1a;错误的答案 蓝色标注的是&#xff1a;正确的答案 绿色标注的是&#xff1a;做题时有疑问的地方 练习题 一、复习题1、我的答案&#xff1a;正确答案&#xff1a; 2、3、4、5、6、7、8、9、10、11、12、 二、编程练习1、2、第4问我不会a、b、…

基于轨迹的汽车跟随系统横向控制方法

A Trajectory-Based Approach for the Lateral Control of Vehicle Following Systems 基于轨迹的汽车跟随系统横向控制方法 Abstract Abstract| A crucial task for steering an autonomous vehicle along a safe path in a vehicle following scenario is the lateral cont…

ubuntu查看CPU、内存、硬盘

1、查看CPU cat /proc/cpuinfo 我这台机器CPU是2核&#xff0c;所以这里是2核 或者使用如下命令也可以查看 lscpu 查看CPU使用率 top 2、查看内存 查看内存信息&#xff1a; free -h 查看内存使用情况&#xff1a; vmstat 3、硬盘 查看硬盘使用情况&#xff1a; df -…

用视频文件模拟摄像头进行抖音、视频号直播的无人直播机(虚拟摄像头)推流器使用说明详细介绍

无人直播机是嵌入式软硬件一体化设计&#xff0c;支持远程修改设备参数&#xff0c;远程回放设备录像&#xff0c;还支持3.5mm音频实时互动&#xff0c;以及多个视频随机轮播或者顺序轮播。无人直播机不仅稳定还节能&#xff0c;支持7*24小时运行&#xff0c;不死机不卡顿。 一…

求职利器:高频面试题与算法详解

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

vue3父子组件双向数据绑定v-model;父组件调用子组件事件

效果&#xff1a; 父far.vue <template><div><div>父组件内容<pre>value1:{{ value1 }}</pre><el-button type"primary">flag1:{{ flag1 }}</el-button><pre>obj1:{{ obj1 }}</pre><el-input v-model&q…

Java 入门指南:接口(Interface)

引言 在Java编程中&#xff0c;接口&#xff08;Interface&#xff09;是一种非常重要的概念&#xff0c;它不仅是面向对象编程&#xff08;OOP&#xff09;的基石之一&#xff0c;也是实现高内聚、低耦合设计原则的关键工具。接口定义了一组方法&#xff0c;但不提供这些方法…

@Mapper报红

检查pom.xml&#xff0c;导入 org.mybatis.spring.boot 依赖&#xff1a; <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency…

Java-EE 网络编程(1)

目录 一、网络初识 二、协议 协议的定义 协议分层 协议分层的好处 TCP/IP五层模型 五层协议 协议之间如何配合工作的 三、网络编程套接字 TCP/UDP特点 UDP回显服务器 UDP的socket api 回显服务器 回显客户端 一、网络初识 先了解一些核心概念&#xff1a; 局域网…

CsvExport:一个.Net高性能、低内存的CSV导出开源库

在我们项目开发中&#xff0c;导出CSV数据功能是非常常见的。 今天推荐一个高性能、低内存的CSV导出开源库。 01 项目简介 CsvExport是一个基于C#非常简单和快速的CSV导出开源库。 该开源库的核心特点&#xff1a; 导出功能兼容性高&#xff08;自动检测分隔符&#xff0c;…

CSC7720 可正、负应用5V2.1A同步整流

CSC7720是一款同步整流芯片&#xff0c;可以代替肖特基二极管提高反激变换器的效率。CSC7720 支持工作在非连续模式&#xff08;DCM&#xff09;的反激变换器中&#xff0c;其内部集成了低 RDS&#xff08;ON &#xff09;的 N 沟道功率MOSFET&#xff0c;外围应用简单&#xf…

STM32—SPI通信

1.SPI简介 四根通信线&#xff1a;SCK(Serial Clock)(时钟线)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) 同步、全双工 支持总线挂载多设备&#xff08;一主多从&#xff09; 所有SPI设备的SCK、MOSI、MISO分别连在一起 主机…

【Python学习-UI界面】PyQt5 小部件13-Slider 拖动条

高级布局管理器&#xff0c;允许通过拖动边界来动态改变子小部件的大小。 Splitter控件提供一个手柄&#xff0c;可以拖动以调整控件的大小 样式如下: 常用方法如下&#xff1a; 序号方法描述1addWidget将小部件添加到拆分器的布局中2indexOf返回布局中小部件的索引3insetW…

炖羊肉

炖羊肉必备的两种香辛料&#xff0c;白胡椒、白芷&#xff0c;让你炖出的羊肉软嫩&#xff0c;汤汁鲜美 在烹饪艺术的广阔领域中&#xff0c;炖羊肉作为一道经典佳肴&#xff0c;其风味的层次与深度往往取决于所选香辛料的精妙搭配。其中&#xff0c;白胡椒与白芷作为炖羊肉时…

fun状态上传,并可手动控制

文章目录 引言上传原因:矛盾点:基础工程源码: 代码实操fun状态上传fun状态下发控制 引言 上传原因: 续上一节, 我们把fun像小灯一样, 加入了预警工程, 但是我们fun其实还有其他用处, 比如我们人工手动开风扇, 排风, 所以我们需要把fun的状态上传, 然后也可以通过服务器手动控制…

EmguCV学习笔记 VB.Net 2.3 Mat类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV学习笔记目录 Vb.net EmguCV学习笔记目录 C# 笔者的博客网址&#xff1a;VB.Net-CSDN博客 教程相关说明以及如何获得pdf教…

StackStorm自动化平台

1. StackStorm概述 1.1 StackStorm介绍 StackStorm是一个开源的事件驱动自动化平台&#xff0c;它允许开发者和系统管理员自动化IT和网络操作。StackStorm结合了IT运维、DevOps和网络安全团队的需求&#xff0c;提供了一个集中式的工作流自动化解决方案&#xff0c;包括事件响…

Windows10、ARM开发板、虚拟机Ubuntu可同时上网

一、Windows10端设置 1、打开网络配置 2、打开适配器 3、将window连接的wifi网卡设置为共享模式 4、查看本地连接的ip 到此&#xff0c;window10端设置完毕 二、设置虚拟机端&#xff08;Ubuntu&#xff09; 1、打开网络配置 2、打开适配器 3、查看本地连接的网卡名称 4、配置…

超越流水线,企业研发规范落地新思路

作者&#xff1a;子丑 内容大纲&#xff1a; 1、研发规范≠流程约束 2、自动化工具→研发规范载体 3、研发规范在工具上的落地示例 4、研发规范的选型方法与常见实践 研发规范≠流程约束 这个故事特别适合研发规范的场景&#xff0c;我们要避免成为把猫绑在柱子上的信众…

[NOIP2007 普及组] 守望者的逃离 题解

题意 给定 M ( 0 ≤ M ≤ 1 0 3 ) , S ( 1 ≤ S ≤ 1 0 8 ) , T ( 1 ≤ T ≤ 3 1 0 5 ) M(0 \leq M \leq 10^3),S(1 \leq S \leq 10^8),T(1 \leq T \leq 3\times 10^5) M(0≤M≤103),S(1≤S≤108),T(1≤T≤3105)&#xff0c;守望者开始在位置 0 0 0&#xff0c;对于每一秒&…