【C】Re10 共用体、枚举、类型定义

Union 联合体\共用体

结合体:

每个成员的内存空间都是独立存在的,互不干涉

int 成员、double 成员、char 成员 = 4 + 8 + 1 【13字节大小】 取成员字节占用之和作为这个结构体的大小

联合体:

每个成员的内存空间在一起共用

int 成员、double 成员、char 成员 = 8 > 4 > 1 【8字节大小】 取成员最大字节占用类型作为这个共用体的大小

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

union U {
    int a;
    short b;
    char c;
};
void test() {
    printf("union U size -> %llu\n", sizeof(union U));

    union U u = { // 共用体只有占用字节大的那个数据类型获取,小类型会被覆盖
            100,
            20,
            30
    };

    printf("sum -> %d\n", u.a + u.b + u.c); // 100 + 100 + 100
}

void test2() {
    union U u = { // 所有的成员变量最后都会指向最大字节占用的成员属性
            100,
            20,
            30
    };
    u.a = 20;
    printf("sum -> %d\n", u.a + u.b + u.c);
    u.b = 30;
    printf("sum -> %d\n", u.a + u.b + u.c);
    u.c = 40;
    printf("sum -> %d\n", u.a + u.b + u.c);
}

int main() {
    test2();
    return 0;
}

Enumeration 枚举

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

enum Season {
    Spring,
    Summer,
    Autumn,
    Winter
};

enum boolean {
    false = 0, true = 1
};

int main() {

    enum boolean isTrue = true;
    if (isTrue) {
        printf("yes is true");
    }

    return 0;
}

TypeDef的使用

给数据类型起一个别名

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef int integer ; // 基本数据类型别名

struct S {
    int aaa;
    char bbb;
};
typedef struct S sss ; // 结构体数据类型别名

void typedefUsage() {
    int aaa = 100;
    integer aa = 100;
}

typedef int * integerPointer ; // 适合给指针类型起别名
typedef char * characterPointer ;

int main() {
    return 0;
}

 

posted @ 2020-11-12 11:44  emdzz  阅读(139)  评论(0编辑  收藏  举报