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

相关推荐
洛的地理研学6 分钟前
Python下载并处理MOD13A3植被指数数据
开发语言·python
humcomm8 分钟前
Java 新特性2026年5月速览
java·开发语言
xiao_li_ya10 分钟前
C++学习日记1(`*`的理解、const关键词)
开发语言·c++
Liangwei Lin23 分钟前
LeetCode 287. 寻找重复数
算法·leetcode·职场和发展
码力斜杠哥24 分钟前
Rust初习录(6)Rust的 if 玩法
开发语言·python·rust
聆风吟º29 分钟前
【C标准库】深入理解C语言 isalpha 函数详解:判断字符是否为字母
c语言·开发语言·库函数·isalpha
WL_Aurora1 小时前
Java字符输入全攻略
java·开发语言
OCR_133716212751 小时前
护照OCR校验位技术解析:从算法逻辑到工程落地,筑牢证件核验安全线
人工智能·算法
Hello.Reader1 小时前
算法基础(十三)——随机算法为什么有时主动引入随机性
java·数据库·算法
茉莉玫瑰花茶1 小时前
LangGraph 拓展核心知识点
开发语言·windows·python