【C】自定义数据类型

简介: 【C】自定义数据类型

枚举

枚举故名思义就是一一列举

把可能的取值一一列举

1定义

enum Day//星期
{
    //枚举的可能取值
    Mon,
    Tus,
    ...
};
enum Sex//星期
{
    //枚举的可能取值—— 常量
    MALE,//0
    FEMALE,//1      可以在后面加入 = 给他一个初始值
    //如果前面的赋值了,后面的没有赋值,就按顺序往下延。
            
    SECRET//2
        
};
int main(void)
{    
    //规定好了它的取值
    //enum是类型
    enum Sex s = MALE;
    //S
    return 0;
}

enum Color
{
    red,//0
    green,//1
    blue//2
}
int main(void)
{
    //在上面定义的枚举常量中green所对应的值就是2,那么我们在这可不可以直接给s赋值为2呢?
    //可以看到编译器并没有报错,说明编译器的语法检测不严格。
    //2在这里是整型
    //Color是枚举类型,两侧的类型是有差异的
    //在c++中会报错,c++语法检测更为严格
    enum Color s =;
    //
    return 0;
}

#include<stdio.h>
#define red 0
#define green 1
#define blue 2
int main(void)
{    
    int color = red;
    return 0;
}
//枚举的写法比这个要更加好一些

2枚举的优点

为什么使用枚举?

我们可以使用#define来定义常量,使用枚举的优点是什么呢。

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

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

3防止命名污染(命名冲突)(封装)。

封装就是把数据和函数打包到一个类里面

4便于调试。

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


程序的执行过程

c语言的源代码--预编译-链接-可执行程序

这里的预编译就是在处理#define之类的东西

预编译会把所有的注释都删除


enum的大小怎么算呢

#incldue<stdio.h>
enum sex
{
    male,
    female,
    secret
        
}
int main(void)
{    
    enum sex s male;
    printf("%d\n",sizeof(s));
    return 0;
}

联合(共用体)

1联合类型的定义

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

#include<stdio.h>
union sb
{
    char c;//一个字节
    int a;//四个字节
};
//4个字节
int main(void)
{
    union sb s;
    printf("%p\n", &s);
    printf("%p\n", &(s.c));//注意是句号
    printf("%p\n", &(s.a));
    //三个地址相同

    return 0;
}

2特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合有能力 保存最大的那个成员)。

联合体内的成员不能同时使用


结构体、枚举、联合体的关键字不一样,性质也不一样


3联合大小的计算

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

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

相关视频链接.

相关文章
|
1月前
|
存储 C#
C#数据类型之结构体介绍
C#数据类型之结构体介绍
|
4月前
|
存储 C语言
自定义类型:联合体和枚举
联合体类型,联合体的大小计算,联合体的实际应用,练习:判断大小端,枚举类型,枚举类型的声明:枚举类型的优点,枚举类型的实际案例:
|
7月前
|
存储 编译器 C语言
【C语言】自定义数据类型:枚举+共用体
【C语言】自定义数据类型:枚举+共用体
25 0
|
1月前
|
程序员 C语言
在C语言中,typedef是一种用来创建新的数据类型名的关键字
在C语言中,typedef是一种用来创建新的数据类型名的关键字
9 0
|
1月前
|
编译器 测试技术 C语言
详解自定义类型:枚举与联合体!
详解自定义类型:枚举与联合体!
|
2月前
|
存储 C++
c++复合类型(一)
c++复合类型(一)
30 0
|
2月前
|
存储 C++
c++复合类型(二)
c++复合类型(二)
26 0
|
8月前
|
存储 编译器 C语言
自定义数据类型:结构体,枚举,联合
自定义数据类型:结构体,枚举,联合
|
8月前
|
程序员 编译器 C++
|
9月前
|
存储 编译器 Linux
自定义类型:结构体、枚举、联合体
自定义类型:结构体、枚举、联合体