C语言中内存对齐与结构体
结构体 结构体是一种新的数据类型,对C语言的数据类型进行了极大的扩充。 struct STU{ int age; char name[15]; }; struct STU a; //结构体实例 struct STU *b; //结构体指针 1、可以通过a.age对其进行取成员的操作,b->age也可以进行结构体的操作,b->age存在问题,必须有一个结构体空间已经让b指向,b的值为此结构体空间的地址。 2、a.name = "lilei"; false,因为name是数组名称,指针常量不能赋值,解决方案:strcpy()函数 3、字符串直接进行比较的话,是其地址的比较,没有什么意义,用strcmp()函数进行比较,就是ASCII码的比较了。 内存对齐 操作系统对于内存空间的分配,遵循如下原则:总是从2^n倍数为地址的字节处开始分配空间。 如:若按4B对其模式的话,则每个变量(结构体成员)的首地址总是从编号为4的整数倍的字节处开始分配空间。 可设几字节对齐如下 #pragma pack(push) //保持原对齐格式 #pragma pack(1) //设定为n字节格式 ....... #pragma pack(pop) //恢复为原对齐格式 1、结构体大小 (1)、总大小是下一个类型的整数倍,否则用单字节补齐(单字节最多补到4/8,具体看结构体中最宽几字节) /