我是靠谱客的博主 瘦瘦香氛,最近开发中收集的这篇文章主要介绍C语言的联合(union)类型(27),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C语言的联合(union)类型:

union 联合名{
          数据类型 成员名;
          数据类型 成员名;
          ...
     } 联合变量名;
    联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型和不同长度的变量。

测试程序代码:

/************************************************************
 Copyright (C), 1998-2006, Rx. Co., Ltd.
 FileName: mainApp.cpp
 Author: longronglin
 Version : 1.0
 Date: 2006-10-06
 Description:      
 Function List:   
    1. int main()
 History:      
      <author> <time> <version > <desc>
      longronglin    2006/10/08     1.0      modify xxx . 
**********************************************************
*/


#include 
< stdio.h >


/*
 * 返回1为正确执行
 * 主函数
 *
 
*/


int  main()
{
    union
    
{
        
int i;
        
char x[2];
    }
 num;

    num.x[
0= 10
    num.x[
1= 1;

    printf(
"%x  ",num.i);

    
return (1);
}
  

运行结果图:

 有些人说是010a。这是和数据类型的内存分配有关。我上面的测试是在VC下的测试。

同样的也有一段网上流传的程序,大家看看结果。并分析一下。


int main()
{
        union{                   /*定义一个联合*/
               int i;
               struct{             /*在联合中定义一个结构*/
                    char first;
                    char second;
               }half;
          }number;
          number.i=0x4241;         /*联合成员赋值*/
          printf("%c%c/n", number.half.first, number.half.second);
          number.half.first='a';   /*联合中结构成员赋值*/
          number.half.second='b';
          printf("%x/n", number.i);

 return (1);
}

答案: AB   (0x41对应'A',是低位;Ox42对应'B',是高位) 6261 (number.i和number.half共用一块地址空间)。为什么这里的前面没有cccc呢?大家看看。因为赋过值。

最后

以上就是瘦瘦香氛为你收集整理的C语言的联合(union)类型(27)的全部内容,希望文章能够帮你解决C语言的联合(union)类型(27)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部