设为首页 加入收藏

TOP

8.3.1 定义联合
2013-10-07 12:33:15 来源: 作者: 【 】 浏览:66
Tags:8.3.1 定义 联合

8.3.1  定义联合

我们使用关键字union定义联合。最好的理解方法是看一个定义的示例:

  1. union shareLD       // Sharing memory between long and double  
  2. {  
  3. double dval;  
  4. long lval;  
  5. }; 

这段代码定义了一个联合类型shareLD,以允许long和double类型的变量占用相同的内存。联合类型名通常被称作标记名(tagname)。我们还没有真正定义过联合的实例,因此此刻还没有任何变量,从这方面来讲该语句与类定义相似。在定义过联合类型之后,我们就可以在声明中定义联合的实例。例如:

  1. shareLD myUnion; 

该语句定义了前面定义的联合类型shareLD的一个实例。我们也可以通过将myUnion包括在联合的定义语句中,来达到定义该实例的目的:

  1. union shareLD   // Sharing memory between long and double  
  2. {  
  3. double dval;  
  4. long lval;  
  5. } myUnion; 

为了引用联合的成员,我们要使用直接成员访问运算符(.)与联合实例的名称,就像访问类成员时那样。因此,我们使用下面这条语句,可以将联合实例MyUnion中的变量lval设定为100:

  1. myUnion.lval = 100;     // Using a member of a union 

在后面的程序中,使用类似的语句初始化double类型的变量dval将覆盖掉lval。使用联合可以在相同内存中存储不同类型的数值,随之而来的问题是由于联合的特殊工作方式,我们必须有某种方法来确定当前的成员值。为此,通常还需要用一个变量来充当当前值类型指示器。

联合不仅仅限于两个变量之间的共享。如果愿意,我们可以使多个变量共享相同的内存。联合占用的内存大小取决于最大的成员。例如,假设定义了下面这个联合:

  1. union shareDLF  
  2. {  
  3. double dval;  
  4. long lval;  
  5. float fval;  
  6. uinst = {1.5}; 

如图8-2所示,shareDLF的实例将占用8个字节。

 
(点击查看大图)图  8-2

在本例中,我们定义了该联合的实例uinst,并定义了联合的标记名,还将实例初始化为数值1.5。

注意:

当声明实例时,我们只能初始化联合的第一个成员。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.3.2 匿名联合 下一篇8.8.3 访问与修改字符串

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: