struct、union、const 和 #define 区别

1. struct、union
struct可以存储不同类型数据,可以同时使用,union也可以存储不同类型的数据,但是只能同时存储其中的一种,也就是说当存储int类型的变量时,其他数据类型丢失,存储double时,int之类的数据也会丢失。
在一个联合体内可以定义多种不同的数据类型。union中的各个成员共用一块内存。
共用内存的大小是和union中占空间最大的元素所占用的空间一样大,即这些数据共享同一段内存。
通过这种方法,可以达到节省空间的目的。
与struct相同,union的默认访问权限也是公有的,而且具有成员函数。
不过需要注意的是,对union中不同成员的写操作,是会覆盖其他成员的值!
union中不可以包含构造函数/析构函数/拷贝构造函数/赋值运算符/虚函数的类成员变量,因为它们共享内存,编译器无法保证对象不被破坏,也无法保证离开时调用析构函数。即使用C风格形式的struct。
当然,定义普通的成员函数是可以的,因为这不会使得class与C风格的struct有任何本质区别,完全可以将这样的class理解为一个C风格的struct + n个全局函数。
struct与union
union与struct有一些相似之处,但是二者有本质区别。
在结构体中,各个成员有各自的内存空间,一个结构变量的总长度是各成员长度的总和。
在联合体中,各个成员共享一段空间,一个联合变量的长度等于各个成员中最长的长度。
所谓的共享,不是指把多个成员同时装入一个联合变量内,而是指该联合体可被赋予任一成员值,但是每次只能赋同一种值,赋给的新值替代旧值。
二者的具体区别在于:
共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放一个被选中的成员, 而结构体则存放所有的成员变量。
对于共用体的不同成员赋值,将会对其他成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。
二者的内存分配不同。联合体的大小为其内部所有变量的最大值。

2. const 和 #define 区别
(1)都是在编译时处理的,即分配内存,作用是相同的。即:二者基本等价
(2)区别:const 常量是由编译器处理的,提供类型检查和作用域检查;
     #define,宏定义由预处理器处理,单纯的文本替换。可以用 #undef a 卸载宏定义。
     原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值