【让你从0到1学会c语言】自定义类型详解(二)

简介: 【让你从0到1学会c语言】自定义类型详解(二)

位段的内存分配


位段内存空间的计算规则:

1.位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的。

2.位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段


我们通过一个例子来了解一下位段的内存分配:


位段的跨平台问题:


1.位段包括unsigned int和signed int,是否有符号的这个问题没办法确定。(最高位是否为符号位)

2.位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机

器会出问题。

3.位段中,内存有低位向高位存储,还是有高位向低位存储不确定(没有确定是大端存储或者是小段存储)

4.当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是

舍弃剩余的位还是利用,这是不确定的。

位段和结构体对比时,位段可以很好的节省空间,而结构体不可以,但是位段存在明显的跨平台问题!!!


枚举类型:


枚举如何定义:

我们来介绍一下枚举:


它成员和成员之间是用逗号,而结构体用分号


RED,GREEN,BLUE叫做枚举的可能取值,而结构体的成员叫做成员变量

这里RED,GREEN,BLUE是有对应数字的,分别对应0,1,2


枚举的可能取值因为是枚举常量,所以不允许更改,但可以在一开始初始化。例如:RED=5;


枚举的优点:

我们可以使用 #define 定义常量,为什么非要使用枚举?

枚举的优点:

1. 增加代码的可读性和可维护性

2. 和#define定义的标识符比较枚举有类型检查,更加严谨。

3. 防止了命名污染(封装)

4. 便于调试

5. 使用方便,一次可以定义多个常量


枚举的使用:

我们利用通讯录来了解一个枚举使用的好处:

我们正常会写一个函数(printf)来显示选择什么代表什什么,而我们运用枚举就可以避免这个问题,直接输入操作。


联合体(共用体):


联合体的定义:

跟结构体相同,没有什么区别:

联合体的每个变量共用同一个地址。


联合体的缺点:

但共用体有个缺点,如下图,不能同时使用c或b或者y,一次只能使用其中一个


联合体的内存大小:

联合的大小至少是最大成员的大小。

当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。



相关文章
|
21天前
|
安全 编译器 Linux
【c语言】轻松拿捏自定义类型
本文介绍了C语言中的三种自定义类型:结构体、联合体和枚举类型。结构体可以包含多个不同类型的成员,支持自引用和内存对齐。联合体的所有成员共享同一块内存,适用于判断机器的大小端。枚举类型用于列举固定值,增加代码的可读性和安全性。文中详细讲解了每种类型的声明、特点和使用方法,并提供了示例代码。
19 3
|
1月前
|
存储 编译器 Linux
C语言——自定义类型
C语言——自定义类型
|
1月前
|
存储 编译器 C语言
【C语言】自定义类型:联合与枚举的简明概述
【C语言】自定义类型:联合与枚举的简明概述
|
3月前
|
存储 编译器 C语言
【C语言篇】自定义类型:联合体和枚举详细介绍
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。
45 1
|
3月前
|
存储 安全 编译器
C语言自定义类型
C语言自定义类型
33 10
|
5月前
|
编译器 测试技术 C语言
【C语言】:自定义类型:结构体的使用及其内存对齐
【C语言】:自定义类型:结构体的使用及其内存对齐
68 7
TU^
|
5月前
|
编译器 C语言 C++
C语言之自定义类型
C语言之自定义类型
TU^
36 2
|
5月前
|
编译器 C语言 C++
【C语言基础】:自定义类型(二) -->联合和枚举
【C语言基础】:自定义类型(二) -->联合和枚举
|
5月前
|
编译器 C语言
【C语言基础】:自定义类型(一)--> 结构体-2
【C语言基础】:自定义类型(一)--> 结构体
|
5月前
|
编译器 Linux C语言
【C语言基础】:自定义类型(一)--> 结构体-1
【C语言基础】:自定义类型(一)--> 结构体