当free释放内存之后,指针还指向原来的那块地址,需要我们设置 p = NULL;如果不手动设置 p = NULL,此时P就变成了野指针。
32位机器 int是4个字节,char是一个字节
16位机器 int是2个字节,char是一个字节
![](https://i-blog.csdnimg.cn/blog_migrate/16d88cdf16f18c584134866d331561f2.png)
本题是16位机器,char型占1个字节,int型占2个字节。
结构体中字节对齐有两条规则:
- 数据成员自对齐,即数据成员起始地址为数据类型长度的整数倍,如该题int型b只能从0,2,4...等地址处开始放;
- 结构体总长度是结构体中有效对齐值的整数倍,有效对齐值,如该题没明确指出,则为最长数据成员(int b)长度的整数倍;
根据上面两条规则,画出内存示意图。根据规则1,int b从2处开始放,此时结构体总长度为(1 + 1 + 2 + 1 = 5);再根据规则2,结构体总长度应为2的整数倍,故应为6.描红的两个字节表示被浪费的。
使用const比使用define有一下几种好处:
(1)const会进行数据类型检查,而define不会
(2)const效率高,因为const定义的常量,没有在内存中存储,而是在符号表中,每次访问这个数据的时候,少了从内存中读取和存储过程,效率高。
因此尽量还是使用const常量
整型和浮点型,只要浮点型的小数部分为0,是可以==的,返回的是true
&a+1 相当于a加上a类型的偏移,a是int,等于a[0]+4
深拷贝 开辟内存,浅拷贝,指向同一空间