1.结构体
类似于Javaben,C语言中可以将一些其他变量,封装成结构体,结构体和共用体表示的含义是一样的。
声明
struct Student // struct 相当于class Student 相当于类名
{
char name[50];
int age;
} student,a; .//可以不定义,便是结构体变量,也就是Student类型的变量
//使用typedef定义别名
typedef struct {
char name[50];
int age;
} Student;
2. 内存对齐
对齐根数据在结构体中的位置有关。如果一个变量的内存地址正好位于他的长度的整数倍,他就被称作自然对齐。不如32位CPU下,假设一个整形变量的位置为0x00000004 ,那他就是自然对齐。
3.结构体大小
当结构体需要内存过大,使用动态内存申请。结构体占用字节数和结构体内字段有关,指针占用内存就是4/8个字节,因此传指针比传值效率更高。
遵循原则
结构体变量中的成员的偏移量必须是成员大小的整数倍
结构体大小必须是所有程序大小的整数倍,也即所有成员大小的公倍数
内存对齐的原因:
在32位操作系统中(64位要兼容,主要考虑32位),数据总线是32位,地址总线是32位。
地址总线32位,意味着寻找地址是按4递增的,数据总线32位意味着一次可读写4byte
提升寻址效率
struct Student
{
short j;
int i;
short k;
} s1,s2;
int main()
{
struct Student student;
student.i = 10;
student.j = 5;
s1.i = 10;
s1.j = 5;
printf("结构体大小%d ", sizeof(student));
system("pause");
return 0;
}