1. 声明一个结构体
声明一个结构体的一般形式为
struct 结构体名
{
成员表列;
};
例如:
struct Student
{
int number;
char name[64];
char sex;
int age;
int score;
};
2. 结构体类型占内存大小计算方式
内存地址对齐,指的是CPU在访问内存时排列、访问数据的方式。以下是32位计算机不同的数据类型所需要的n个字节对齐。
char,1字节对齐
short,2字节对齐
int,4字节对齐
float,4字节对齐
double,8字节对齐
计算结构体类型站内存大小需要满足以下两个条件:
条件1、结构体变量中成员的偏移量必须是成员大小的整数倍。
条件2、结构体大小必须是最大内存地址对齐数的大小的整数倍。
练习1:
struct stu1
{
char c1;
int i;
char c2;
};
stu1在内存中大小如下:
c1首先占一个字节,i的偏移量从1开始,但是要满足条件1,i的偏移量必须是i的大小(4)的倍数,所以i的偏移量从4开始并占了4个字节,c2的偏移量从8开始占了一个字节。此时结构体大小是9(4+4+1)个字节,但是要满足条件2,所以结构体的大小是12(至少是4的倍数)个字节。
struct stu2
{
float f;
char c;
float d;
};
Stu2在内存中大小如下:
3. 结构体定义
1) 先声明结构体类型,再定义结构体变量,如
在前面我们已经声明过许多结构体。例如:
struct Student
{
内容;
};
struct Studentstudent1,student2;
2) 在声明类型的同时定义变量,如
struct Student
{
内容;
}student1,student2;
3) 使用typedf重新定义数据类型
typedef struct Student
{
内容;
}student;
student student1,student2;