第二十讲 联合结构

       关于结构,我们说得比较多,但是想要说透却不容易,所以,今天我们还是继续说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 <stdio.h>#include <stdlib.h>union BookPhone{
int number;

int telphone;

char name[20];

};


int main()
{
BookPhone A;

gets(A.name);

printf(“%sn”,A.name);

A.number = 1;

printf(“%s,%dn”,A.name,A.numer);


       A.telphone = 159111111;

printf(“%s,%d,%dn”,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我们也就说到这里了,想要真正的熟悉还要多练多写,接下来我们该说资源管理了。

发表评论