C语言中的联合体与枚举

文章目录

  • 一、联合体
    • 1.联合体的概念:
    • 2.联合体的定义:
    • 3.联合体的初始化:
    • 4.联合体指针与成员引用:
    • 5.联合体的使用:
  • 二、枚举(enum)
    • 1.概念:
    • 2.枚举的应用:枚举类型的成员变量等价于整型,其支持整型数据的一切操作


提示:以下是本篇文章正文内容,下面案例可供参考

一、联合体(union)

1.联合体的概念:

联合体与结构体形式上类似,都是有多个不同的数据类型的变量组合而成,但与结构体不同的是联合体所用的成员变量共同使用同一个地址,在联合体中所有的成员变量都是互斥的,我们给联合体中一个成员变量赋值会使其他的成员变量失效,在同一个时间段,联合体只有一个有效的成员变量,联合体的尺寸为联合体中最大成员变量的m值(也就是其所占的字节数)。

画图理解联合体:

union attr{

        int x;

        char y;

        double z;

};

2.联合体的定义:

#include<stdio.h>

//联合体类型的定义:

union attr{

    int x;

    char y;

    double z;

};

int main(){

    //联合体的定义

    union attr at;

}

3.联合体的初始化:

#include<stdio.h>

//联合体类型的定义:

union attr{

    int x;

    char y;

    double z;

};

int main(){

    //普通赋值

    union attr at1 = {1,'s',10.8};//只有第一个有效

    //指定成员赋值

    union attr at2 =

    {

        .x = 100,

        .y = 'a',

        .z = 88.8//最后一个赋值的成员变量有效

    };

}

4.联合体指针与成员引用:

#include<stdio.h>

#include<string.h>d

//联合体类型的定义:

union attr{

    int x;

    char y;

    double z;

    char c[100];

};

int main(){

    //联合体的指针,成员变量的引用。

    union attr *p = &at2;

    p->x = 100;

    p->y = 'a';

    p->z = 99.8;//最后一个赋值的成员变量有效

    //p->c = "aaa";会报错

    strcpy(p->c,"aaa");//使用strcpy函数才行

}

5.联合体的使用:

#include<stdio.h>

union attr{

    int chinese;

    int math;

    int english;

};

struct student{

    int id;

    char name[100];

    union attr at;

};

int main(){

    /**

     * 联合体一般是放在结构体中进行嵌套使用

     */

    //普通初始化

    struct student s1 = {1,"aaa",1,1,1};

    printf("%d,%s,%d,%d,%d\n",s1.id,s1.name,s1.at.chinese,s1.at.math,s1.at.english);

    //指定成员变量初始化

    struct student s2 =

    {

        .id = 100,

        .name = "aaaa",

        .at.chinese = 1,

        .at.english = 5,

        .at.math = 10

    };

    printf("%d,%s,%d,%d,%d\n",s2.id,s2.name,s2.at.chinese,s2.at.math,s2.at.english);

   

}

运行结果:

二、枚举(enum)

1.概念:

枚举

作用:就是用有意义的单词代替无意义的数字,增加代码的可读性。

关键字enum

若未给枚举类型的成员变量初始化则枚举类型的元素是从0开始,后一个元素值是

前一个元素值+1

#include<stdio.h>

//枚举类型的定义

enum season{

    spring = 1,

    summer,

    autumn = 10,

    winner

};

int main(){

    printf("%d\n",summer);//summer等价于2

    enum season s = winner;//winner = 11,该表达式等价于s = 11

    printf("%d\n",s);

}

运行结果:

2.枚举的应用:枚举类型的成员变量等价于整型,其支持整型数据的一切操作

#include<stdio.h>

//设计一个小车,用枚举实现

//前进,后退,向左,向右四个功能,根据move选择小车移动的方向

enum car_move{

    car_move_up = 1,//表示小车向上移动

    car_move_down,//表示小车向下移动

    car_move_left,//表示小车向左移动

    car_move_right//表示小车向右移动

};

int main(){

    enum car_move move = car_move_up;

    switch(move){

        case car_move_up:

            printf("小车向上移动\n");

            break;

        case car_move_down:

            printf("小车向上移动\n");

            break;

        case car_move_left:

            printf("小车向上移动\n");

            break;

        case car_move_right:

            printf("小车向上移动\n");

            break;

        default:

            printf("error\n");

    }

   

}

运行结果:

​​​​​​​

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值