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 类似与结构体变量的三种定义方式,共用体变量也有三种形式的定义方式。即先定义共用体类型,在定义共用体变量;定义共用体类型的同时定义共用体变量;不含共用体类型名定义共用体变量。
例如,
相关文档:
GDB
是
GNU
开源组织发布的一个强大的
UNIX
下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像
VC
、
BCB
等
IDE
的调试,但如果你是在
UNIX
平台下做软件,你会发现
GDB
这个调试工具有比
VC
、
BCB
的图形化调试器更强大的功能。所谓
“
寸有所长,尺有所短
”
就是这个道理 ......
clock()返回clock_t类型;
在time.h头文件中,定义了 typedef long clock_t
clock()是用来计算两个时间点之间的时间间隔。如下程序:
#include <stdio.h>
int main()
{
int i = 0;
clock_t start_time, end_time;
start_time = clock(); //开始计时, start_time = 0
while( ......
exercise2.4
void squeeze(char s[],char t[])
{
int i,j,k;
int lens,lent;
lens=strlen(s);
lent=strlen(t);
for(i=0,k=0;i<lens;i++)
{
for(j=0;j<lent;j++)
if(s[i]==t[j])
break;
if(j==lent)
s[k++]=s[i];
}
s[k]='\0';
}
exercise2.5
int any(char s[],char t[ ......
12.1 位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ &nb ......
我用的是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 ......