C/C++
9.2 共用体
C语言除了提供结构体这种可包含多种类型数据的构造类型外,还提供了一种从形式上看和结构体堪称“孪生兄弟”的构造类型——共用体(union)。
本节从共用体的概念入手,从共用体的概念、与结构体的异同、使用等方面进行详细的介绍。
9.2.1 什么是共用体
现实生活中,某些事物往往可以用多种方式去表述,各种方式的地位是平等的,都是从不同的侧面去反应这个事物。例如,古人用的字、名、号,都是对一个人的称谓,但是会根据不同的场合和情况使用其中的一种。又例如,用数字和用优、良、中、差都可以表示成绩,具体使用上可能根据成绩的种类不同而选用其中的一种方式。
如果这些方式可以用同一种类型来表示,那么数组“勉强”能够用来对其进行存储,但浪费存储空间。而如果其数据类型不同,数组就“无能为力”了。结构体似乎也能对其进行表述,但并不是最佳的方式。针对这种情况下,C语言提供的共用体数据类型。
共用体,亦称联合,是有别于前述任何一种数据类型的特殊数据类型,其用来描述类型不相同的数据。与结构体不同的是:共用体对成员存储时采用覆盖技术,共享(部分)存储空间,成员被分配在同一段内存空间中。成员既可以具有相同的数据类型,也可以具有不同的数据类型。
共用体定义与结构体相似,其一般形式为:
union 共用体名
{
数据类型 成员名1;
数据类型 成员名2;
……
数据类型 成员名n;
};
例如,下面定义一个表示成绩的共用体:
union mark
{
int score; //表示分数
char degree[4]; //表示等级
};
其如图9.15所示:
图9.15 共用体mark
9.2.2 共用体与结构体
共用体和结构体,作为两种构造类型,从形式上看极其相似,但确实是两种不同的数据类型,可以说是“貌似神离”。下面从外部形式(外部)和内存使用(内部)两方面对其进行比较。
1. 外部的“情投意合”
共用体的定义、共用体变量的定义、共用体变量的引用等方面和结构体形式相同,可以简单的看作用union关键字替代struct关键字。具体说明如下:
l 类似与结构体变量的三种定义方式,共用体变量也有三种形式的定义方式。即先定义共用体类型,在定义共用体变量;定义共用体类型的同时定义共用体变量;不含共用体类型名定义共用体变量。
例如,
相关文档:
c运行库malloc分配的内存在哪里呢,首先上代码:
//内存大小连接器将其地址指向-heap选项
extern _DATA_ACCESS int _SYSMEM_SIZE;
//内存区域
#pragma DATA_SECTION(_sys_memory, ".sysmem")
far PACKET _sys_memory[1] = { ((size_t)&_SYSMEM_SIZE) - sizeof(PACKET), 0 };
  ......
一个由C/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放
,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放
,
若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方 ......
12.1 位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ &nb ......
首先确保系统已经安装了gcc/g++
1> Anjuta
打开终端:
命令:sudo apt-get install anjuta
(不能安装的需要添加安装源
添加源:点击主菜单上的“系统”》“系统管理”》“软件源”,输入密码后,在出现的对话框中点“第三方软件”,
“deb http://anjuta.org.sixxs. ......
我用的是ubuntu操作系统。打开终端
1.sudo apt-get install vim(vim-full 这个软件自9.10版本被废弃了,不论怎么添加软件源都找不到的,所以直接安装vim就可以了,,也可以安装gvim,,在新立得软件里面搜索vim就可以找到了)
2.
sudo apt-get install build-essential // build-essential是c语言的开发包,包含了gcc ma ......