本文共 1458 字,大约阅读时间需要 4 分钟。
结构是一些值的集合,这些值成为成员变量。结构的每个成员可以是不同类型的变量
struct s { char a; int b; }s1;
这里的a和b就是结构体的成员变量,s1就是结构体的名字。
当我们在声明结构体时,可以忽略掉结构体标签s,进行不完全声明
struct { char a; int b; }s2;
这两个一样吗?虽然它们看上去一样,但是因为标签不同,编译器会将它们当作两个完全不同的类型。
在一个结构体中我们是否可以包含一个这个结构体本身的成员变量呢?
答案是可以的,但是也是有条件的,我们只能引用这个结构体类型的指针这种用法在我们数据结构中的链式存储结构中经常可以看到。
同时还有一个需要注意的地方,在声明结构体时,很多同学都是使用typedef来重命名结构体,但是如果结构体中存在自引用的话,我们就不能使用重命名后的名字来声明自引用,因为重命名在结构体内部成员成员变量的声明之后。
了解了结构体的基本内容,下面来看看如何定义结构体变量。
我们可以在声明结构体的时候进行定义,也可以单独进行定义
同时我们的初始化也遵循这个原则
之前我在指针那一章中讲到过数组的传参,而结构体的传参也与它大同小异。
传参分为两种,一种传地址,一种传数值。结构体与数组不同的地方就在于它是两种都支持的,
所以当我们在进行结构体传参的时候应该传结构体的地址
结构体还存在位段和内存对齐,因为难以理解所以我单独发了一个博客进行讲解。
结构体内存对齐,位段详解:https://blog.csdn.net/qq_35423154/article/details/103190437枚举理解起来十分简单,就是将可能的取值一一列举出来
联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征时这些成员公用一块空间。
声明方式
这是为什么呢?
如;
因为联合体的成员是共用同一块空间的,所以我们可以利用这个特点,更简单的来判断机器的大小端
之前讲的方法:https://blog.csdn.net/qq_35423154/article/details/102712686