C-构造类型-共用体-枚举

共用体

1.产生及意义

2.类型描述

c 复制代码
union 共用体名
{
	数据类型 成员名1;
	数据类型 成员名2;
	...............;
};

3.嵌套类型

4.定义变量(变量 数组 指针) ,初始化及成员引用

成员引用: 变量名.成员名

指针名->成员名

5.占用内存大小

6.函数传参(值 地址)

7.位域

共用体定义与引用

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

union test_un // 多个成员共用一块空间,根据里面最大的那个数据类型来分配占用的空间
{
	int i;//4
	float f;//4
	double d;//8
	char ch;//1
};

int main()
{
	union test_un a;
	union test_un *p = &a;
	union test_un = arr[3];

	a.f = 345.678;
	p->f = 345.678;
	printf("%d\n",sizeof(a));
	//printf("%f\n",a.f);
	//printf("%d\n",a.i);
	
	exit(0);
}

嵌套定义和位域问题

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

struct 
{
	int i;
	char ch;
	union
	{
		int a;
		char c;
	}un;
	float f;
};//结构体嵌套共用体
union 
{
	int a;
	double d;
	struct
	{
		int arr[10];
		float f;
	}c;
};//共用体嵌套结构体
union 
{
	struct 
	{
		uint16_t i;
		uint16_t j;
	}x;
	uint32_t y;
}a;//同时由于结构体x和整数y共享内存空间,结构体x的两个成员i和j的值也被修改为了相应的值。
//联合体(union)来访问同一块内存中的不同部分。联合体的特点是它的所有成员共享同一块内存空间,
//因此修改一个成员的值会影响到其他成员。这是因为联合体中所有成员都从同一内存地址开始。

int main()
{	
	unsigned int i = 0x11223344; 
	printf("%x\n",(i >> 16) + i & 0xFFFF);
	
	a.y = 0x11223344;
	printf("%x\n",a.x.i + a.x.j);
	exit(0);
}

位域

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

union 
{
	struct
	{
		char a:1;//一个比特位
		char b:2;
		char c:1;
	}x;
	char y;
}w;

int main()
{	
	w.y = 1;
	printf("%d\n",w.x.a);
	
	exit(0);
}

枚举

bash 复制代码
enum 标识符
{
	成员1;
	成员2;
	...;
};
c 复制代码
#include<stdio.h>
#include<stdlib.h>

enum day
{
	MON,
	TUS,
	THR,
	WES,
	FRI,
	AST,
	SUN

};//默认从0开始  

enum day
{
	MON = 1,
	TUS,
	THR,
	WES,
	FRI,
	AST,
	SUN

};//或者赋值第一个 或者第几个  自动顺次往下排

enum
{
	STATE_RUNNING = 1,
	STATE_CANCELED,
	STATE_OVER
};

struct job_st
{
	int id;
	int state;
	time_t start,end;
};

int main()
{	
	enum day a = MON; 
	a = SUN;
	printf("%d\n",a);

	struct job_st job1;
	
/*获取任务状态	job1.state = STATE_OVER;*/
	switch(job1.state)
	{
		case STATE_RUNNING:
			;
			break;
		case STATE_CANCELED:
			;
			break;
		case STATE_OVER:
			;
			break;
		default:
			abort();
	}
	exit(0);
}
相关推荐
幸运超级加倍~25 分钟前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
杨荧26 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
白子寰33 分钟前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
yannan2019031333 分钟前
【算法】(Python)动态规划
python·算法·动态规划
埃菲尔铁塔_CV算法35 分钟前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR35 分钟前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
linsa_pursuer36 分钟前
快乐数算法
算法·leetcode·职场和发展
小芒果_0137 分钟前
P11229 [CSP-J 2024] 小木棍
c++·算法·信息学奥赛
qq_4340859039 分钟前
Day 52 || 739. 每日温度 、 496.下一个更大元素 I 、503.下一个更大元素II
算法
Beau_Will39 分钟前
ZISUOJ 2024算法基础公选课练习一(2)
算法