抱歉这么久才更第二期 (是我怠惰了<_>)话不多说 上期说到结构体的自引用 接下来继续
正片开始:
1.结构体变量的创建和初始化
在有了结构体类型下,如何定义变量,结构体变量的初始化使用也很重要
举例说明
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
struct Point
{
int x;
int y;
}p1;//声明类型的同时定义变量p1
struct Point p2;//定义结构体变量
//初始化:定义变量的同时赋初值。
struct Point p3 = {10,20};
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 };//结构体嵌套初始化
如上所见 结构体是这么进行变量创建的 (其实也就是把结构体嵌套发扬光大),这在后面数据结构也会经常使用
2.结构成员访问操作符
结构体操作访问符有两个 分别是
.
和
->
具体操作如下
1.结构体变量.成员变量名
2.结构体指针->成员变量名
也是 举例说明 :
struct Stu
{
char name[20];
int age;
};
void set_stu(struct Stu*ps)
{
strcpy(ps->name, "李田所");//用->访问结构体
ps->age = 24;
}
void print_stu(struct Stu s)
{
printf("%s",s.name,s.age );//用.访问结构体
}
int main()
{
struct Stu a = { "原野",23 };
print_stu(a);
set_stu(&a);
return 0;
}
3.结构体内存对齐
在掌握了结构体的基本使用后 那就开始深入讨论关于计算结构体的大小
其中 重要的一点就是 结构体对齐
3.1.对齐的规则
首先 介绍以下结构体对齐的规则
1. 结构体的第⼀个成员对齐到相对结构体变量起始位置偏移量为0的地址处
2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
对齐数=编译器默认的⼀个对齐数与该成员变量大小的较小值。
-VS默认对齐数为8
-Linux中没有默认对齐数与该成员变量大小的较小值
3. 结构体总大小为最大对齐数(结构体中每个成员变量都有⼀个对齐数,所有对齐数中最大的)的 整数倍。
4.如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构 体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。