在自学结构体的时候总感觉学了就忘,看书的时候感觉很简单,但用起来就忘,所以过来总结一下,接下来的总结会有纰漏,会有错误,希望看到的有缘老哥指出(不知道会不会有人看
TAT
ps.Markdown到底怎么用啊我*,富文本虽然也好用就是了,但是默认是Markdown啊.
1.什么是结构体
结构体就是结构+体(废话) 结构是什么,结构是一些值的集合,数据结构就是一些数据的集合,结构里的值称为成员变量,可以是不同类型的变量. 对于之后定义和初始化,我觉得结构体就是自定义一个类型,就好像int,char之类的,只不过里面有很多不同类型的值. 下面就来是创建初始化什么的
2.结构体的创建和定义
//结构体的创建
//接下来描述一个学生
struct student {
char name[1024];
char sex[1024];
char id[1024];
}s1;//定义结构体变量s1
//定义结构体变量s2
struct student s2;
3.结构体的初始化
初始化就是给定义的变量赋值(自己老是忘定义的定义,写下来记一下)
//结构体的创建
//接下来描述一个学生
struct student {
char name[1024];
char sex[1024];
char id[1024];
}s1;//定义结构体变量s1
//定义结构体变量s2
struct student s2;
struct student s2 = { "大莲", "女", "123456" };//结构体的定义
用带括号,直接这样赋值就好,这里有的老哥就会问了,博主博主,那如果我只想给name赋值怎么办,哈哈,好问题,我不知道(逃
靴微开个小玩笑,其实我都是在访问的时候赋值的,等会下面写
4.结构体的访问
用 .
也可以用结构体指针变量
//结构体的创建
//接下来描述一个学生
struct student {
char name[1024];
int age;
char sex[1024];
char id[1024];
}s1;//定义结构体变量s1
//定义结构体变量s2
struct student s2;
struct student s2 = { "大莲", "女", 15,"123456" };//结构体的
int main () {
s2.age = 20;//对于结构体中int的调用和赋值
strcpy(s2.name, "李四");//这样是对于char这些字符变量的赋值,要用strcpy
}
用指针的话
struct student {
char name[1024];
int age;
char sex[1024];
char id[1024];
}s1;//定义结构体变量s1
//定义结构体变量s2
struct student s2;
struct student s2 = { "大莲", "女", 15,"123456" };//结构体的
struct student* p;
int main () {
s2.age = 20;//对于结构体中int的调用和赋值
strcpy(s2.name, "李四");//这样是对于char这些字符变量的赋值,要用strcpy
p->age = 20;
}
5.结构体内存对齐
原因总的来说吧,一些平台内存只能在某些地址初取某些特定类型的数据,否则硬件异常
用空间换时间的做法
1).结构体中第一个元素地址在对于结构体偏移量为0的地址
2).其余的元素要对其到对齐数的整数倍的地址处
对齐数:就是编译器默认的一个,如果比较的成员的大小比默认值小,就取小值
3).结构体的总大小为对齐数的整数倍
ps.结构体当函数参数穿的话要用地址
6.还有个知识点叫位段
struct test {
int _a : 2;
int _c : 5;
int _d : 10;
};
这就是一个段位类型,可以自定元素大小,有很多运用空间
7.枚举
其实枚举也算结构体(我这么理解的
比如
enum Sex {
MALE;
FEMALE;
UNKNOW;
};
这个性别的枚举
8.联合体
这种知识点很奇妙,因为看完就忘,甚至都不记得自己学过,有必要记录一下;
明天写8