分享

第二十讲 联合结构

 昵称29398856 2016-01-21

       关于结构,我们说得比较多,但是想要说透却不容易,所以,今天我们还是继续说struct,struct之于C就好比class之于C++一样,所以他的重要性就不言而喻了,因为在实际的开发中,仅C/C++自身提供的这些数据类型根本无法满足,怎么办呢?我们就要得自己定义新类型,在c语言里面,想要自定义自己的类型,只能通过struct,不过还好,在C++里面我们不但可以通过struct来定义新类型,我们还有更好使的,那就是class,不过关于class留待C++的部分再说,今天我们要说的是联合类型的结构,怎么创建一个联合类型?今天我们要说的关键字不是struct,而是union,如下:

-------------------------------

union BookPhone{

        int   number;

        int   telphone;

        char   name[20];

};

--------------------------------

      union的意义和struct的一样,他们都可以自定义一个类型,不过这个union类型和struct类型却有些不同,我们不妨来看看怎么使用他。

----------------------------------

#include
#include
union BookPhone{
      int number;
      int telphone;
      char name[20];
};

int main()
{
       BookPhone A;
       gets(A.name);
       printf('%s\n',A.name);
       A.number = 1;
       printf('%s,%d\n',A.name,A.numer);

       A.telphone = 159111111;
       printf('%s,%d,%d\n',A.name,A.number,A.telphone);

       system('PAUSE');
       return 0;
}

-------------------------------------

       我们输入名字为“Zhang San”,然后看我们看到接下来的输出如下面所示:

---------------------------------------

Zhang San

乱码,1

乱码,1591111111,1591111111

--------------------------------------

       我们看到名字变成了乱码,接下来我们还看到number变成了电话号码,为什么会这样呢?这就是我们今天要说的重点,不过却不多。

       首先,我们初始化name,name使用了10个字节,所以一开始能够正常显示。

       接下来,我们又给int类型的number赋值1,使用了两个字节,值得注意的是这个时候刚才我们输入的“Zhang San'被擦出了,所以这个时候我们想在输出name就会变成乱码了,这时候我们用strlen去查看这时候,得到的长度是1。

      最后,我们再把电话号码设为159111111,这时候再查看number和name,发现name的长度又变成了9,number却和telphone一样了。

      通过上面这个例子,大家是不是看出了些端倪来了呢?union的意思是不是也明白了呢?一句话,联合联合就是联合使用内存,这是一种节省资源的方式,不过现在很多人都觉得这不重要,内存已经白菜价了,所以基本没什么人关心union类型了。

       关于union今天就说到这里了,以后我们也可能很少会触碰到这个类型,不过了解一些总是好的,关于struct我们也就说到这里了,想要真正的熟悉还要多练多写,接下来我们该说资源管理了。

 

=========================

回复D&d直接查看目录。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多