结构体、联合体以及枚举类型是我们在学习C/C++中经常遇到的一些数据结构,接下来我们就来认识和区别一下他们。
结构体:(struct)
用途: 把不同的数据组合成一个整体——自定义数据类型
C语言:在C语言中,结构体指的是一种数据结构,是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。
C语言中结构体的大小与内存对齐,参考博主的这篇博客:https://mp.youkuaiyun.com/postedit/81218372
C++中:考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展,C++的结构体可以包含函数,这样,C++的结构体也具有类的功能,与class不同的是,结构体包含的函数默认为public,而不是private。
(1)class中默认的成员访问权限是private的,而struct中则是public的。
(2)从class继承默认是private继承,而从struct继承默认是public继承。
(3)C++的结构体声明不必有struct关键字,而C语言的结构体声明必须带有关键字(使用typedef别名定义除外)。
联合体:(union)
用途:使几个不同类型的变量共占一段内存(相互覆盖)
将几种不同类型的变量存放到同一段内存单元中。使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。
共用体所有成员共享同一个内存地址。对成员赋值会覆盖以往的值。只能使用其中一个成员。共用体所占用的内存是能够存储成员中最大成员的尺寸,并不等最大成员的内存。
结构体和联合体的区别:
结体构中各成员有各自的内存空间,一个结构体变量的总长度大于等于各成员长度之和。
而在“联合”中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。
枚举类型:(enum)
用途:有的变量只有几种可能取值。如人的性别只有两种可能取值,星期只有七种可能取值。枚举是一个被命名的整型常数的集合。
默认值:在枚举类型中声明的第一个枚举成员它的默值为零。以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加 1 得到的。这样增加后的值必须在该基础类型可表示的值的范围内;否则,会出现编译时错误。
枚举元素:枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。因为是常量,所以不能对枚举元素进行赋值。
元素类型:枚举声明可以显式地声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 类型作为对应的基础类型。没有显式地声明基础类型的枚举声明意味着所对应的基础类型是 int。