美文网首页
构造类型-联合类型

构造类型-联合类型

作者: 晓晓桑 | 来源:发表于2020-04-19 20:42 被阅读0次
  • 关键字 union
  • 声明的方式跟结构体一模一样。
  • 特别:所有的成员共享一块内存。(结构体是每一个成员都有一块内存)
  • 联合的大小是最大成员的大小
  • 修改一个成员,其他成员也会改变。
union Un {
    char c;
    short s;
    int i;
}un1,un2;

int main(void) {
    return 0;
}
内存共享:
image.png
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
union Un {
    char c;
    short s;
    int i;
} un1, un2;

struct stru {
    char c;
    short s;
    int i;
} stru;

int main(void) {
    //union Un的元素的起始地址是一样的,因为内存是共用的
    printf("%p,%p,%p\n", &un1.c, &un1.s, &un1.i);//0x10c5bf018,0x10c5bf018,0x10c5bf018

    //结构体的起始地址不一样哦,因为内存不共用
    printf("%p,%p,%p", &stru.c, &stru.s, &stru.i);//0x104302018,0x10430201a,0x10430201c
    return 0;
}
初始化
union Un {
    int i;
    char c;
    short s;

} un1, un2;
int main(void) {
    //初始化部分,其他部分自动初始化成0
    //要初始化占位最大字节的成员
    //想初始化哪个成员,就把他放到最前面
  //union Un un3 = {21};跟下面的意思一样
    union Un un3 = {.i=3};
    un3.c = 97;

    return 0;
}

赋值

union Un {
    int i;
    char c;
    short s;

} un1, un2;

int main(void) {

    //因为一个字节可以放的数字是-128~127,
    //21在-128~127之间,一个字节都能放得下
    union Un un3 = {21};
    printf("%d,%d,%d\n", un3.i, un3.c, un3.s);//21,21,21

    //解释看下图
    union Un un4 = {256};
    printf("%d,%d,%d", un4.i, un4.c, un4.s);//256,0,256
    return 0;
}
image.png
大小

不小于最大成员的字节。union不涉及到成员对齐,但是涉及到结尾补齐。

union Un {
    int i;
    char c;
    short s;

} un1, un2;

int main(void) {

    //因为int 最大是4字节
    printf("%u,%u", sizeof(union Un), sizeof un1);//4,4
    return 0;
}
结尾补齐
image.png
union Un {
    int i;
    char c[5];
    short s;

} un1, un2;

int main(void) {

    //结尾补齐
    printf("%u,%u", sizeof(union Un), sizeof un1);//8,8
    return 0;
}
union Un {
    double d;
    char c[9];
    short s;

} un1, un2;

int main(void) {

    //结尾补齐
    printf("%u,%u", sizeof(union Un), sizeof un1);//16,16
    return 0;
}

相关文章

  • 构造类型-联合类型

    关键字 union 声明的方式跟结构体一模一样。 特别:所有的成员共享一块内存。(结构体是每一个成员都有一块内存)...

  • iOS 复杂构造类型与字符串互相转换

    复杂构造类型转字符串方法: 字符串转复杂构造类型方法:

  • 非受限联合体

    联合体(union)是一种构造类型的数据结构。在一个联合体内,我们可以定义多种不同的数据类型,这些数据类型会共享内...

  • 构造类型

    基本类型是 int long 等。 构造类型,是人们创造出来的数组,字典等。 是为了合理的解释这个世界,统计信息...

  • 构造类型-枚举类型

    作用:声明代表整数常量的名称。(就是给整数起个名)目的:提高代码的可读性。本质:一组有名字的int常数,默认是从0...

  • 构造类型-数组

    C语言命名规则第一个字符:是字母或者下划线,后面的:字母、下划线、数字。 数组特点 类型相同的元素的组成的集合 数...

  • C语言结构体知识点记录

    一.结构体 概念 结构体是构造类型的一种 构造类型前面还有数组 数组的作用是用于储存一组相同类型的数据 结构体的作...

  • C语言数据类型

    基本数据类型:int、 char、 float、 double 构造类型: 数组、枚举、结构体 空类型: void...

  • C语言指针入门与基本数据类型

    C语言数据类型 基本数据类型 char short int long double float 构造类型 数组 结...

  • 结构体的基本概念

    基本数据类型: int double float char构造类型: 数组/ 结构体人:姓名: // char *...

网友评论

      本文标题:构造类型-联合类型

      本文链接:https://www.haomeiwen.com/subject/qjlbbhtx.html