关于结构体的个人小结

在自学结构体的时候总感觉学了就忘,看书的时候感觉很简单,但用起来就忘,所以过来总结一下,接下来的总结会有纰漏,会有错误,希望看到的有缘老哥指出(不知道会不会有人看

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

猜你喜欢

转载自blog.csdn.net/nihuhui666/article/details/89431814