• 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

更多...

加载中...