结构体数组赋值,和二维数组赋值类似,可以{{},{}};、也可以{,,,}。
两者等价,q[i].stu 与 (q+i)->stu
浅拷贝和深拷贝,发生在结构体内嵌套了指针,且动态分配空间时
浅拷贝,eg:不同结构体变量中的同类型成员,一起指向一个内存区域,易发生重复释放(free())
深拷贝,eg:再开辟一块内存区域,并重新拷贝一份,不同结构体变量中的同类型成员,虽然值相同,却指向不同的内存区域
结构体字节对齐规则,默认以结构体中最长的成员类型为对齐单位(基准),依次按顺序存放(不能乱序存放)
char a[4],相当于4个char依次存放
结构体嵌套结构体时,当轮到被嵌套进去的那个结构体类型时,无论如何,都另起一行(行的字节长度即为基准,此时基准取两个结构体中最长的成员类型为对齐单位)
可以指定对齐单位,#pragma pack(2)——指定对齐单位为2个字节,必须是2的n次方
如果小于最长的成员,最长的成员就分行放,eg:#pragma pack(2),int类型,一行放2个字节
如果大于最长的成员,系统机智的按照默认来,以节省空间
不完整类型的字节对齐,eg:
struct A
{
int a1:5;
int a2:9;
char c;
int b:4;
short s;
}A;
若两位域字段的类型相同,且相邻位域的位宽之和小于该类型的sizeof大小,则后者与前者紧邻存储
若两位域字段的类型相同,相邻位域的位宽之和大于该类型的sizeof大小,则另起一行
若两位域字段的类型不同,VC6采取不压缩方式,Dev-C++和gcc采取压缩方式
如果两位域字段之间穿插着非位域字段,则不进行压缩
整个结构体的总大小,为最宽基本类型成员大小的整数倍(这是该类大问题的一个共性)
分子分母有一个是小数(或double类型),就可以得到小数;分子分母都是整数,则只会截取最终结果的整数部分
指针间接赋值:先用同级指针开辟内存空间,然后再把同级指针的值,赋值给真正需要开辟空间的指针
指针变量,通过存储某内存空间地址的方式,以指向某内存空间。