C语言学习笔记 Day13(C9复合类型)

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关键字起的别名是淡蓝色的,而变量都是黑色的。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值