C语言联合(union)的定义和初始化

  • 内容
  • 评论
  • 相关

当定义结构对象时,如果没有显式地初始化它们,则会采用一般初始化规则:如果该结构对象属于动态存储类型,那么其成员具有不确定的初始值。另一方面,如果结构对象具有静态存储周期,那么其非指针成员初始值是 0,其指针成员初始值是空指针。

不同于结构成员——它们在结构中都具有单独的内存位置,联合成员则共享同一个内存位置。也就是说,联合中的所有成员都是从相同的内存地址开始。因此,可以定义一个拥有许多成员的联合,但是同一时刻只能有一个成员允许含有一个值。联合让程序员可以方便地通过不同方式使用同一个内存位置。

定义联合(union)

联合的定义方式与结构是一样的,只是把关键字 struct 改成 union

union [标签名称]{成员声明列表};

下面的例子定义了一个名为Data的联合类型,它有 3 个成员:i、x 和 str:

union Data { int i; double x; char str[16]; };

这种类型的对象可以存储一个整数、一个浮点数或一个短字符串。下面的声明定义了一个 union Data 类型的对象 var 和一个 unionData 类型的数组 myData,它有 100 个元素(联合的空间大小为它最大成员的空间大小):

union Data var, myData[100];

如果想获得联合的空间大小,可以使用 sizeof 运算符。对上例来说,sizeof(var)会返回 16,而 sizeof(myData)则返回 1600。

如图 1 所示,联合中所有成员都是从内存中同一个地址开始的。


图 1

本文标题:C语言联合(union)的定义和初始化

本文地址:https://www.hosteonscn.com/2787.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注