结构体介绍
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
结构体类型
1.1结构体对齐规则
a、结构体的第一个成员对齐到和结构体变量起始位置偏移量为0的位置;
b、其他成员变量要对齐于某个数(对齐数)的整数倍的地址处。
注:对齐数 = 编译器默认的一个对齐数与该成员变量大小的较小值。
(vs 中的默认的值为:8
Linux 中gcc没默认对齐数,对齐数就是成员自身的大小
c、结构体总大小为最大对齐数,(结构体中每个成员变量都有一个对齐数,所有对齐数中最大的)整数倍
d、如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数
列子;
struct S1
{
char c1;
int i;
char c2;
};
printf("%d\n", sizeof(struct S1));
对于结构体的初始化,我们可以在创建时就对他声明,如
struct student{
char name[20];
int age;
double score;
} s1={"zhangsan",34,89.33};
也可以在使用前初始化
typedef struct student{
char name[20];
int age;
double score;
} stu;
int main()
{
struct stu S={"zhangsan",34,89.33};
//...
return 0;
}
结构体的内存对齐
struct S1
{
char a;
int b;
char c;
};
struct S2
{
char a;
char b;
int c;
};
int main()
{
printf("%d %d\n", sizeof(struct S1),sizeof(struct S2));
return 0;
}
结构体变量的定义和初始化
struct Point
{
int x;
int y;
}p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2
//初始化:定义变量的同时赋初值。
struct Point p3 = {x, y};
struct Stu //类型声明
{
char name[15];//名字
int age; //年龄
};
struct Stu s = {"zhangsan", 20};//初始化
struct Node
{
int data;
struct Point p;
struct Node* next;
}n1 = {10, {4,5}, NULL}; //结构体嵌套初始化
struct Node n2 = {20, {5, 6}, NULL};//结构体嵌套初始化