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:错误:枚举值溢出

相关推荐
黄卷青灯772 分钟前
标定系数为什么会存储在相机模组里面,在标定的时候,算法是在割草机的X3板上运行的啊?
数码相机·算法·相机内参
螺丝钉的扭矩一瞬间产生高能蛋白19 分钟前
PID算法基础知识
算法
凤山老林22 分钟前
SpringBoot 如何实现零拷贝:深度解析零拷贝技术
java·linux·开发语言·arm开发·spring boot·后端
黄毛火烧雪下29 分钟前
ruby 、gem 和 cocoapods的联系与区别
开发语言·ruby·cocoapods
彷徨而立43 分钟前
【C/C++】只知道窗口句柄,如何擦除窗口内容,清理窗口?
c语言·c++·windows
盼哥PyAI实验室1 小时前
Python函数进阶秘籍:闭包、装饰器与作用域全解析(通俗版)
开发语言·python
oceanstonetree1 小时前
用cosyvoice批量把生成有声书
开发语言·python
半夏知半秋1 小时前
游戏登录方案中常见的设计模式整理
服务器·开发语言·笔记·学习·游戏·设计模式·lua
云知谷1 小时前
【经典书籍】C++ Primer 第14类虚函数与多态精华讲解
c语言·开发语言·c++·软件工程·团队开发
HVACoder1 小时前
复习下线性代数,使用向量平移拼接两段线
c++·线性代数·算法