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

相关推荐
Keven_115 分钟前
AcWing算法提高课思路速查:搜索
算法·搜索
沙蒿同学26 分钟前
当古诗词遇上 AI:从 38 万句诗词中取一个好名字
python·算法·架构
变量未定义~37 分钟前
单调栈、单调队列(模板)、子矩阵(模板)
数据结构·算法·蓝桥杯
不会就选b1 小时前
算法日常・每日刷题--<快速排序>2
数据结构·算法
xxie1237941 小时前
Python装饰器与语法糖
开发语言·python
郑州光合科技余经理1 小时前
海外外卖平台源码改造实战——多语言核心代码实现
java·开发语言·前端·后端·mysql·架构·php
CClaris1 小时前
大模型量化从0到1(五):GPTQ 原理详解 + 从零量化一个真实大模型
人工智能·python·算法·机器学习
凯瑟琳.奥古斯特1 小时前
力扣1012数位DP解法详解
开发语言·c++·算法·leetcode·职场和发展
shx_wei1 小时前
从函数调用到进程替换:使用 execl、CMake 与 PowerShell 构建一个多可执行程序
linux·c语言·windows·c
Railshiqian1 小时前
UserPickerActivity 内部逻辑分析
开发语言·python