C语言中的联合体

C语言的联合体

  1. 概念
  2. 声明和初始化
联合的概念:
将几种不同类型的变量存放到同一段内存中,这种数据结构称为联合或公用体(应用其实并不是那么广泛)
声明语法
union{
    类型说明符号 成员名;
    ...;
};
注意:所有成员使用的时候是内存的相同的位置
联合的长度就是它最长成员的长度
联合变量的定义方式和结构体相同,只需要将关键字替换成union;
联合变量进行初始化必须是联合的**第一个成员类型值**

简单的事例:

#include<stdio.h>
int main(void){
    //a,b,c共享了同一段内存
    union Element{
        int a;
        float b;
        char c;
    }u={10};//初始化第一个元素的数值
    printf("a:%d b:%f c:%c\n",u.a,u.b,u.c);
    u.b = 3.5f; //赋值
    printf("a:%d b:%f c:%c\n",u.a,u.b,u.c);
    return  0;
}

代码二:结构体与联合体共同使用:

#include<stdio.h>

struct{
    char name[20];
    char sex;
    char job;//如果学生为s,教师为t
    int num;
    //定义一个联合体
    union{
        int class; //班级信息--->对应学生
        char position[10]; //职位信息----->对应老师
    }category;
}person[2];

int main(void){
    int n,i;
    for(i = 0; i<2;i++){
        printf("Please enter NUM NAME SEX JOB\n");
        scanf("%d %s %c %c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);
        if(person[i].job == 's'){
            printf("please enter the student class\n");
            scanf("%d",&person[i].category.class);
        }else if(person[i].job == 't'){
            printf("please enter the teacher position\n");
            scanf("%s",person[i].category.position);
        }else{
            printf("input Error\n");
        }
    }

    printf("==================================\n");
    for(n = 0;n < 2;n++){
        if(person[n].job == 't'){
            printf("name:%s,sex:%c,job:%c,num:%d,position:%s\n",person[n].name,person[n].sex,person[n].job,person[n].num,person[n].category.position);
        }else if(person[n].job == 's'){
            printf("name:%s,sex:%c,job:%c,num:%d,class:%d\n",person[n].name,person[n].sex,person[n].job,person[n].num,person[n].category.class);
        }
    }
    return 0;
}

以上的事例代码都是可以直接进行run的,欢迎大家持续访问,会有更多精彩

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值