数据结构:共用体+枚举

一、共用体

1.共用体中的所有成员,共享一片内存空间,成员的首地址都相同

2.共用体的大小,取决于共用体中成员大小更大的那个

3.一个成员的数据发生修改,另一个会跟着修改

1.定义

把定义结构体时的struct改成union即可

访问共用体成员与访问结构体成员类似。 变量用.访问,指针用->访问

cs 复制代码
union A
{
    int a;
    char c;
};  //声明共用体类型
union A a1;   //定义了一个共用体变量

2.大小端存储(字节序问题)

小端存储:地址低位存数据低位 (常见的计算机都是小端存储)

大端存储:地址地位存数据高位 (网络通信的数据包一般是大字节序)

2.1使用共同体判断字节序问题

cs 复制代码
#include <stdio.h>
union A
{
    char t1;
    int t2;
};
int main(int argc, const char *argv[])
{
    union A a1;   //栈区
 a1.t2 = 0x12345678;   //0x12数据高位  0x78数据低位
    printf("%#X\n",a1.t1);  //访问共用体中的地址低位
    printf("%p\n",&a1.t1);
    printf("%p\n",&a1.t1+3);
    return 0;
}

2.2使用指针判断字节序问题

cs 复制代码
#include <stdio.h>
int main(int argc, const char *argv[])
{
    int a = 0x12345678;
    char *p = &a; //为了只取a的低地址的数据

    if(*p==0x78)
    {
        printf("小端\n");
    }
    else
    {
        printf("大端\n");
    }

    return 0;
}

二、枚举(enum)

1.定义

cs 复制代码
enum 枚举名
{
    枚举项1,
    枚举项2,
    枚举项3,
    ··· 
    枚举项n,           
};  --->使用enum 枚举名 定义变量

typedef enum 枚举名
{
    枚举项1,
    枚举项2,
    枚举项3,
    ··· 
    枚举项n,           
}新的枚举名;  ---->使用新的枚举名定义变量

2.举例

cs 复制代码
#include <stdio.h>
enum week
{
    Sun,
    Mon,
    Tue,
    Wed=6,
    Thu,
    Fri,
    Sat,
};
int main(int argc, const char *argv[])
{
    int a = Sun;
    //Sun = 90;  枚举项不能被赋值
    printf("%d\n",a);
    printf("%d\n",Mon);
    printf("%d\n",Tue);
    printf("%d\n",Sat);
    return 0;
}

3.使用场景

3.1

cs 复制代码
#include <stdio.h>
enum week
{
    Sun,
    Mon,
    Tue,
    Wed,
    Thu,
    Fri,
    Sat,
};
void week_p(enum week p)
{
    switch(p)
    {
    case Sun:
        printf("p是星期天\n");
        break;
    case Sat:
        printf("p是星期六\n");
        break;
    case Mon:
        printf("p是星期一\n");
        break;
    }
}
int main(int argc, const char *argv[])
{
    week_p(Mon);
    return 0;
}

3.2

cs 复制代码
#include <stdio.h>
#include <string.h>
enum LED{
	LED_1,
	LED_2,
	LED_3,
};
enum LED_CON{
	LED_ON,
	LED_OFF,
};
void inint(enum LED L){
	switch(L){
	case LED_1:
		printf("LED_1初始化成功\n");
		break;
	case LED_2:
		printf("LED_2初始化成功\n");
		break;
	case LED_3:
		printf("LED_3初始化成功\n");
		break;

	}
}
void con(enum LED L,enum LED_CON C){
	switch(L){
	case LED_1:
		switch(C){
		case LED_ON:
			printf("LED_1 打开\n");
			break;
		case LED_OFF:
			printf("LED_1 关闭\n");
			break;
		}
		break;
	case LED_2:
		switch(C){
		case LED_ON:
			printf("LED_2 打开\n");
			break;
		case LED_OFF:
			printf("LED_2 关闭\n");
			break;
		}
			break;
	case LED_3:
		switch(C){
		case LED_ON:
			printf("LED_3 打开\n");
			break;
		case LED_OFF:
			printf("LED_3 关闭\n");
			break;
		}
		break;
	}
	if(L==LED_1 && C==LED_ON)  //这里的LED_1不写成L=="LED_1"
		printf("LED_1 打开\n");
	if(L==0 && C==0)
		printf("LED_1 打开\n");
	//这里的LED_1就相当于一个宏定义
	//define LED_1 0



}
int main(int argc, const char *argv[])
{
	init(LED_1);
    con(LED_1,LED_ON);
    init(LED_2);
    con(LED_2,LED_OFF);
    init(LED_3);
    con(LED_3,LED_ON);
	return 0;
}

//这里的LED_1就相当于一个宏定义
//define LED_1 0

相关推荐
船厂电气自动化ai大模型2 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
旖旎夜光2 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
不会就选b6 小时前
算法日常・每日刷题--<优先级队列>2
数据结构·算法
LuminousCPP7 小时前
单链表专题(三)-刷题复盘篇:从快慢指针到环形链表 II 数学推导
数据结构·经验分享·笔记·学习·算法·链表
ChaoZiLL7 小时前
二叉树经典例题
数据结构·算法
三克的油8 小时前
算法基础-1
数据结构·c++·算法
一米阳光86618 小时前
软考(中级)软件设计师核心笔记(8)数据结构——树与二叉树
数据结构·笔记·职场发展·软考·软件设计师·中级职称
依然鸣9 小时前
PTA团体程序设计天梯赛L2真题讲解L2-005-008
开发语言·数据结构·c++·算法·深度优先·pat考试·图论
imaol19 小时前
数据结构--树
数据结构
Tongzhi202610 小时前
通芝科技无感考勤一体机:软硬一体,开箱即用
数据结构·数据库·科技·算法·均值算法·数据库开发