C语言构造类型

共用体

产生以及意义

大小是共用体中占有字节数最大的字节数。共同体同一时间只能存在一个。

类型描述

union 共用体名

{

数据类型 成员名1;

数据类型 成员名2;

。。。

};

嵌套定义

cpp 复制代码
#include <stdlib.h>
#include <stdio.h>


struct MM
{
    int i;
    char ch;

    union   //  MU  不写名称为匿名结构体
    {
        int a;
        char c;
    }un;
    float f;

};

union UU
{
    int a;
    double b;
    struct
    {
        int arr[10];
        float f;
    };
};

int main()
{

    struct MM m;
    printf("sizeof = %ld \n",sizeof(m));

    exit(0);
}

定义变量,初始化与引用

cpp 复制代码
#include <stdlib.h>
#include <stdio.h>

union My
{
    int i;
    float f;
    double  d;
    char    c;

}m1;


int main()
{

    union My m;
    union My* p;

    p->f = 3.14;
    m.i= 10;
    printf("sizeof(m) = %ld \n",sizeof(m) );
    printf("m.f = %f \n",m.f);
    printf("m.i = %d \n",m.i);


    exit(0);
}

占用内存大小

占用共用体中,最大的那个元素的大小

cpp 复制代码
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
/*
求一个无符号数的高16位加低16位
*/


union
{
    struct
    {
        uint16_t i;
        uint16_t j;
    }x;
    uint32_t y;
}a;

int main()
{

    
    unsigned int i = 0x11223344;
    //方式一:位运算
    unsigned int sum = (i>> 16) + (i & 0xFFFF);
    printf("sum = %u \n",sum);
    printf("sum = 0x%x \n",sum);
    //方式二:共用体
    a.y = 0x11223344;
    printf("sum = 0x%x \n",(a.x.i +a.x.j));
    

    exit(0);
}

位域

没有实际的开发意义,但是面试过程中可能会考到

1字节占8位,用位域可以减少空间,但是不好移植,因为不同平台直接会有大小端的数据存储差异。语法 如下: 用冒号进行分开。

计算机存储数据的存储特点:正数直接存储,负数:绝对值 取反 在加1,逆推的话就是 减一 取反在加负号。

struct m

{

char a:1;

char b:2;

};

枚举

在别的语言中,枚举可能是基本类型或者构造类型,根据各自语言的定义。

enum的siof为

nuem 标识符

{

a,

b,

c

}

a从0开始存,一直向上增加,从int,增加到long long类型,超出会报错

enum.c:8:5: error: overflow in enumeration values(

enum.c:8:5:错误:枚举值溢出

)

相关推荐
papaofdoudou8 分钟前
初中数学-整数整除判定法全解:从 2 到 19 的方法、依据与证明
算法
让学习成为一种生活方式18 分钟前
啤酒花基因组与重测序--Nature Communications
人工智能·算法
悠仁さん24 分钟前
【C++】vector 类
开发语言·c++
_upupup34 分钟前
智能指针的原理及简单模拟实现(C++)
开发语言·c++
l1t36 分钟前
DeepSeek总结的OpenZL压缩变换器
c++·算法
想吃火锅100536 分钟前
【leetcode】238.除了自身以外数组的乘积js
javascript·算法·leetcode
en.en..41 分钟前
C语言---宏
c语言·开发语言
郝学胜-神的一滴1 小时前
C++ Templates 01:拨开迷雾,读懂C++模板经典著作
开发语言·c++·程序人生·游戏·游戏引擎·软件构建
坤坤子吖1 小时前
算法学习——高精度加减乘除
c++·笔记·学习·算法
CQU_JIAKE1 小时前
10.1[A]2267,磐久UMX【上下文128K,KVCache部分]
算法