background image

2. 结构和联合的区别
结构和联合有下列区别

:

1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合转只存放了一
个被选中的成员

, 而结构的所有成员都存在。

2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的
不同成员赋值是互不影响的。
下面举一个例了来加对深联合的理解。

4:

main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;

number.i=0x4241; /*联合成员赋值*/
printf("%c%c\n", number.half.first, mumber.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x\n", number.i);
getch();
}
输出结果为

:

AB
6261
从上例结果可以看出

: 当给 i 赋值后, 其低八位也就是 first 和 second 的值;当给 first 和 second

赋字符后

, 这两个字符的 ASCII 码也将作为 i 的低八位和高八位。

结构类型定义和结构变量说明

  在实际问题中

,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符

;学号可为整型或字符型; 年龄应为整型;性别应为字符型;成绩可为整型或实型。 显然不能

用一个数组来存放这一组数据。

 因为数组中各元素的类型和长度都必须一致,以便于编译系

统处理。为了解决这个问题

, C语言中给出了另一种构造数据类型----“结构”。它相当于其它

高级语言中的记录。

  

“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型

或者又是一个构造类型。结构既是一种

“构造”而成的数据类型,那么在说明和使用之前必须

先定义它

,也就是构造它。如同在说明和调用函数之前要先定义函数一样。