结构体部分:(基础章部分)
一.结构体的基础知识
结构体是一些值的集合,这些值成为成员变量。结构的每个成员可以是不同类型的变量。
类型分类:
内置类型:char,short,int,long,long long(c99),float,double,bool(布尔)
自定义类型:结构体(struct),枚举(enum),联合体(union)
1.结构体的声明
结构体:
Struct:关键字
Tag:结构体标签
Member-list:成员列表
Variable-list:结构体变量
例:
*匿名结构体类型的声明
特点:
- 可以把结构体的名字去掉
- 看似相同,编译器会把其当作不同的结构体类型
例:
2.访问结构体成员
有两种访问方式:
- 结构体变量 . 结构体成员名(传值)
- 结构体指针 ->结构体成员名(传址)
一:普通场景
二:结构体内嵌套结构体时
三:要修改的成员变量是字符数组时 (strcpy)
应使用strcpy;原因:数组名是首元素地址不可以覆盖
3.结构体传参
传参有两种类型:
- 传值(传结构体变量)
- 传址(传结构体指针)
PS:传值调用,形参是实参的临时拷贝,开辟还要占据空间。而传址调用仅仅传递地址,节省空间
有两种访问方式:
- 结构体变量 . 结构体成员名(传值)
- 结构体指针 ->结构体成员名(传址)
传值场景:
传址场景:
4.结构体的定义与初始化
一:结构体重命名(typedef)
注意点:
- 实例化时,不用再次写struct Node c(例:直接Node c)
- 在重命名之前不可以使用Node
例:
二:结构体的创建(实例化)
结构体声明时可以同时创建多个变量/多个指针
例:
struct Book { char book_name[20]; char author[20]; int price; char id[15]; }sb3,sb4,*sb5; 等价于struct Book sb3,sb4;
三:结构体的初始化
结构体的初始化分为两种方式
- 声明时直接创建
- 单独创建(按顺序创建/不按顺序创建)
例:
struct Book { char book_name[20]; char author[20]; int price; char id[15]; }sb3={"C++","超人",20,"MB666"};//声明时直接创建 strcut Book SB3={"C++","超人",20,"MB666"};//单独创建(按顺序创建) strcut Book SB3={.price=20};//单独创建(不按顺序创建,直接索引) 不能直接修改成员列表中的数组,要用strcpy!!//详情见同一博客,“访问结构体成员”
自定义类型部分:(进阶部分)
一.自定义类型分类
自定义类型:
结构体(struct)
枚举(enum)
联合体(union)