14. 类中 private,protect,public 三种访问限制类型的区别
- (一) private 是私有类型,只有本类中的成员函数访问;
- (二) protect 是保护型的,本类和继承类可以访问;
- (三) public 是公有类型,任何类都可以访问.
15. struct与union的区别
结构体:将不同类型的数据组合成一个整体,是自定义类型
共同体:不同类型的几个变量共同占用一段内存
- 1)结构体中的每个成员都有自己独立的地址,它们是同时存在的;共同体中的所有成员占用同一段内存,它们不能同时存在;
- 2)sizeof(struct)是内存对齐后所有成员长度的总和,sizeof(union)是内存对齐后最长数据成员的长度
16. 什么是内存对齐?字节对齐的规则是什么?
尽管内存是以字节为单位的,但是大部分处理器并不是以字节来存取数据,一般会以四字节、八字节或更长的单位来取内存。使用内存对齐可以保证每次取内存都是访问块内存地址首部以提高存取效率。
字节对齐规则:
- 1) 结构体中每个变量首地址的偏移量必须能够被其有效对齐值 min(变量自身对齐值, 编译器指定对齐值) 整除。
- 2) 结构体的自身对齐值为结构体中最宽变量的大小,结构体的大小必须被其有效对齐值 min(结构体的自身对齐值, 编译器指定对齐值) 整除。
17. #define和const的区别
- 1)#define定义的常量没有类型,所给出的是一个立即数;const定义的常量有类型名字,存放在静态区域
- 2)处理阶段不同,#define定义的宏变量在预处理时进行替换,可能有多个拷贝,const所定义的变量在编译时确定其值,只有一个拷贝。
- 3)#define定义的常量是不可以用指针去指向,const定义的常量可以用指针去指向该常量的地址
- 4)#define可以定义简单的函数,const不可以定义函数
18. 指针和引用的区别
- 引用是变量的一个别名,内部实现是只读指针
- 引用只能在初始化时被赋值,其他时候值不能被改变,指针的值可以在任何时候被改变
- 引用不能为 NULL,指针可以为 NULL
- 引用变量内存单元保存的是被引用变量的地址
- “sizeof 引用” = 指向变量的大小 , “sizeof 指针”= 指针本身的大小
- 引用可以取地址操作,返回的是被引用变量本身所在的内存单元地址
- 引用使用在源代码级相当于普通的变量一样使用,做函数参数时,内部传递的实际是变量地址