写点什么

C 语言:位段、枚举、联合体

作者:孤衫
  • 2022 年 9 月 04 日
    安徽
  • 本文字数:750 字

    阅读完需:约 2 分钟

C语言:位段、枚举、联合体

引言

之前我们有写过结构体类型,除了结构体类型以外我们的构造类型还包括位段、枚举、联合体。


位段

位是二进制位

位段的声明和结构是类似的,有两点不同

1.位段的成员碧玺是 int ,unsigned int 或 signed int(char)

2.位段的成员名后边有一个冒号和一个数字

举例

struct S{    int a : 2;    int b : 5;    int c : 10;    int d : 30;};
复制代码



枚举

枚举就是一一列举,把可能的取值一一列举。

枚举的定义

enum 枚举名{枚举值列表};

举例:

#include<stdio.h>enum Sex{    MALE ,    FEMALE ,    SECRET}; int main(){       enum Sex s = MALE; //枚举变量的定义    printf("%d", s);    return 0;}
复制代码

枚举里是常量,比如 MALE 就是 0,FEMALE 就是 1,SECRET 就是 2。所以 main 函数里打印出来的 s 值是 0。

那你可能会问,我要是想定义其他常量数值我难道要一直写下去吗?

当然不用,比如你想用常量值 5,那么你可以 MALE = 5;再打印就是 5 了。


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

枚举的优点:

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

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

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

4.便于调试

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


联合体(共用体)

一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间(所以联合也叫共用体)

举例

#include<stdio.h>union Un{    char c;    int i;};
int main(){ union Un u; printf("%d\n", sizeof(u)); //4 return 0;}
复制代码

共用体所占 4 字节空间,且共用体及其中的 c,i 的地址也都一样。

联合体的特点:大小至少是最大成员的大小(因为它至少得有能力保存最大的那个成员),但同一时刻共用体成员只能用一个。

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

数组按一个元素算。


发布于: 刚刚阅读数: 3
用户头像

孤衫

关注

还未添加个人签名 2022.08.02 加入

还未添加个人简介

评论

发布
暂无评论
C语言:位段、枚举、联合体_后端_孤衫_InfoQ写作社区