{{format('0')}} {{format('512')}} {{format('2536')}}

【C语言】共用体 [ 编程杂谈 ]

大数据男孩 文章 正文

想做一个技术博客,奈何实力不够
分享

明妃

{{nature("2022-08-14 17:23:19")}}更新

共用体定义

共用体结构体类似的地方

// 结构体
struct Boy {
    int id;
    char name[20];
    double age;
};

// 共用体
union boy {
    int id;
    char name[20];
    double age;
};

// 共用体 可以不需要名称
union {
    int id;
    char name[20];
    double age;
} boy, a;

共用体初始化

初始化只能给其中一个元素赋值

// 定义时初始化
union Boy {
    int id;
    char name[20];
    double age;
} boy = {
        .name = "大数据男孩",
};

// 直接初始化 第一个成员
union Boy boy = {1}; 

// 用另一个共用体初始化
union Boy b = boy;  

// 初始化指定成员
union Boy o = {.name = "大数据男孩"}; 

共用体里元素的地址

共用体里面元素共用一个地址

#include <stdio.h>
#include <string.h> // 共用体、结构体 在初始化之后赋值,需要用到该库函数
// 共用体
union Boy {
    int id;
    char name[20];
    double age;
};

int main(void){
    union Boy boy;

    boy.id = 1;
    strcpy(boy.name,"大数据男孩"); // 不管是 结构体、共用体,只有在初始化时才能直接对字符串赋值。
    boy.age = 18.5;

    // 打印地址
    printf("boy.id: %p\n", &boy.id);
    printf("boy.name: %p\n",boy.name);
    printf("boy.age: %p\n", &boy.age);

    return 0;
}

[mark]()

共用体里元素的值

因为共用体里元素的地址是一样的,所以只能输出最后赋值元素

#include <stdio.h>
#include <string.h> // 共用体、结构体 在初始化之后赋值,需要用到该库函数
// 公用体
union Boy {
    int id;
    char name[20];
    double age;
};

int main(void){
    union Boy boy;
    // 赋值
    boy.id = 1;
    strcpy(boy.name,"大数据男孩"); // 不管是 结构体、共用体,只有在初始化时才能直接对字符串赋值。
    boy.age = 18.55;
    // 打印共用体的值
    printf("boy.id: %d\n", boy.id);
    printf("boy.name: %s\n",boy.name);
    printf("boy.age: %.2f\n", boy.age);

    return 0;
}

[mark]()

共用体的内存占用

这里内存占用,涉及到与 结构体一样的 内存对齐

#include <stdio.h>
#include <string.h> // 共用体、结构体 在初始化之后赋值,需要用到该库函数
// 公用体
union Boy {
    int id;
    char name[20];
    double age;
};

int main(void){
    union Boy boy;
    // 赋值
    boy.id = 1;
    strcpy(boy.name,"大数据男孩"); // 不管是 结构体、共用体,只有在初始化时才能直接对字符串赋值。
    boy.age = 18.55;
    // 打印共用体元素的内存占用
    printf("boy.id sizeof : %llu\n", sizeof(boy.id));
    printf("boy.name sizeof : %llu\n",sizeof(boy.name));
    printf("boy.age sizeof: %llu\n", sizeof(boy.age));
    // 打印共用体的内存占用
    printf("boy sizeof: %llu\n", sizeof(boy));
    return 0;
}

[mark]()

评论 0
0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}
TOP 2
Spark 2.0 单机模式与集群模式 安装

{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读

TOP 3
Office 2016 Pro Plus 激活

{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读

TOP 4
Linux上 MySQL 开启远程登陆的两种方法

{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读

TOP 5
Linux 安装 MySQL 5.7

{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读

目录

标签云

C语言 共用体

一言

# {{hitokoto.data.from || '来自'}} #
{{hitokoto.data.hitokoto || '内容'}}
作者:{{hitokoto.data.from_who || '作者'}}
自定义UI
配色方案

侧边栏