C语言关键字之union
C语言关键字之union
是什么呢
union 在C语言中可以被称为联合体,也有将其称为共用体。它是一种自定义类型,可以使用它来创建变量。
使用格式
union 联合体名称 {
变量 1;
变量 2;
…
变量 n;
};
如何理解
开辟空间大小是 变量列表中最大的变量所占的空间,足以容纳你变量列表中最大的那个值。
例1:
struct demo {int num1;int num2;
};
首先,先看不使用union的这段代码所开辟的空间是两个 int 的大小,可存储 num1 和 num2,如下图
union struct demo {int num1;int num2;
};
再来看,使用union的这段代码所开辟的空间是一个 int 的大小,要么存储 num1 要么存储 num2,如下图
例2:
struct demo {int num1;long num2;
};
首先,先看不使用union的这段代码所开辟的空间是一个 int + 一个 long 的大小,如下图
union struct demo {int num1;int num2;
};
再来看,使用union的这段代码所开辟的空间是 num1 和 num2 中占内存最大的一个 也就是一个 long 的大小,如下图
使用场景
例如,在 Linux 内核中的这段代码
union task_union {struct task_struct task;char stack[PAGE_SIZE];
};
这段代码使用 union 定义了 task_union,相当于在内存中开辟了 两个变量列表中最大的空间。stack 占用的空间大小是 一页的空间,也就是 4kb 的大小,而 task 的大小肯定是小于 4kb 的,所以这个 task_union 肯定是仅开辟了 4kb 的空间,换句话说就是巧用了 union 在占中存储了 task 。
上面例子的两个补充代码:
PAGE_SIZE的宏定义如下:
#define PAGE_SIZE 4096
task_struct 的结构体如下:
struct task_struct {/* these are hardcoded - don't touch */long state; /* -1 unrunnable, 0 runnable, >0 stopped */long counter;long priority;long signal;struct sigaction sigaction[32];long blocked; /* bitmap of masked signals */
/* various fields */int exit_code;unsigned long start_code,end_code,end_data,brk,start_stack;long pid,father,pgrp,session,leader;unsigned short uid,euid,suid;unsigned short gid,egid,sgid;long alarm;long utime,stime,cutime,cstime,start_time;unsigned short used_math;
/* file system info */int tty; /* -1 if no tty, so it must be signed */unsigned short umask;struct m_inode * pwd;struct m_inode * root;struct m_inode * executable;unsigned long close_on_exec;struct file * filp[NR_OPEN];
/* ldt for this task 0 - zero 1 - cs 2 - ds&ss */struct desc_struct ldt[3];
/* tss for this task */struct tss_struct tss;
};
C语言关键字之union相关推荐
- C语言学习—联合体Union和关键字Typedef
C语言学习-联合体Union和关键字Typedef 前言 1 联合体Union 1.1 Union认知 1.2 Union应用 2 关键字typedef 前言 内容主要为联合体Union和关键字Typ ...
- c语言 char转int_C语言关键字及进制的转换你都知道吗?
前面我们讲过 C语言简洁.紧凑 使用方便.灵活 那是什么使得C语言这么方便呢? 那就是关键字,或称保留字 C语言的关键字共有32个 根据关键字的作用 可分为 数据类型关键字 控制语句关键字 存储类型 ...
- c语言字母表关键字,读书笔记-C语言关键字
001 关键字 C语言一共32个关键字 1. 声明和定义 在开始认识关键字前,必须要明白什么是声明,什么事定义: 定义:(编译器)创建一个对象,为这个对象分配一段内存并给他取上一个名字.在一个作用域内 ...
- c语言getchar用法_C语言 — 关键字
几十个关键字不多,用得多了自然会记住,相信大家也不会担心.下面是C语言中的 32 个关键字: 一丶C语言关键字 第一个关键字:auto 用来声明自动变量.可以显式的声明变量为自动变量.只要不是声明在所 ...
- 根据作用C语言关键字分为,C语言 关键字
关键字就是已被C语言本身使用,不能作其它用途使用的字.例如关键字不能用作变量名.函数名等 由ANSI标准定义的C语言关键字共32个. 根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两 ...
- 由ANSI标准定义的C语言关键字,C语言32个关键字详解
C语言中32个关键字详解 由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register ...
- C语言中文字符索引,C语言关键字中英文对照索引
C语言关键字中英文对照索引 一. C语言关键字对照 关键字,又称保留字,是C语言中已预先定义.具有特定含义的标识符. 注:C语言中共有32个关键字,所有关键字都用小写字母表示,且这些关键字不能用作用户 ...
- 【译】volatile C语言关键字,如何使用?
原文 概要 许多程序员无法正确的理解C语言关键字volatile.这并不奇怪,大多数C原因书籍不过一两句一带而过.本文将告诉你如何正确使用它. 在C/C++嵌入式代码中,你是否经历过下面的情况: 代码 ...
- c语言关键字大全(32个)
C 语言可以像汇编语言一样对位.字节和地址进行操作,而这三者是计算机最基本的工作单元.以下是店铺为大家整理的c语言关键字大全,欢迎阅读 1.auto :声明自动变量 2.break:跳出当前循环 3. ...
最新文章
- R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例(对计算获得的百分比进行近似,值保留整数部分)、使用ggplot2可视化条形图(bar plot)、并在条形图上添加百分比标签
- No.3 clojure 调用 Java
- [iOS]MVVM-框架介绍
- 【LeetCode】130.被围绕的区域
- 计算某天是星期几的方法
- sql2005备份还原详解
- ETHREAD APC 《寒江独钓》内核学习笔记(4)
- 程序员是如何一步一步被诈骗的?《原力计划-打卡挑战》第二周周榜揭晓
- IOS不支持2017-09-09的日期格式
- Kicad安装与配置_Windows
- IAR软件ZigBee物联网
- 安川ga700变频器故障码集_安川变频器故障代码
- 情怀java手机网游_Java开发游戏马里奥,就要码出我们这一代人的情怀
- <论文阅读> M2BEV Multi-Camera Joint 3D Detection and Segmentation with Unified Bird’s-Eye View Represen
- 从Waterfall到Bidding,开发者离Open Bidding还有多远
- python作排产计划表_排产计划表
- Excel if函数用法
- Install Mercury MW150US WIFI dongle on RPi
- 杭州市初级工程师职称评审条件
- 饿了么UI图片上传的实现
热门文章
- 织梦调用图集第一个图片地址
- 2.4 C语言入职例程一:空心菱形输出
- 使用turtle库绘制分形树、太阳花、五角星
- 那些厚黑又细腻的人性社交设计
- iapp启动图代码_GTA5新的R*启动器出现问题之应对方法
- MT6763 N1 防误触模式的实现
- 错误RuntimeWarning: Glyph xxxxx missing from current font的产生原因解析,检测当前字体是否包含某字符
- mysql max()函数和min函数
- MySQL 中 int 最大值
- 快速创建精彩的Flash游戏 (二) Flash3D游戏引擎简介