【待补】
初识struct
-
结构体是什么?
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad ——百度百科接下来我们要说的结构体都是struct,而不是class
我没用过class,也不知道struct和class的区别 -
struct的声明
struct 结构名称{ //成员列表 }; //记得要加分号!!有个很常见的例子是这样的:
有很多个同学,他们有学号、姓名、性别,那么如何把他们存起来?
于是你就可以用个函数体把他们存起来,像这样:struct student{ int num; char name[22]; bool sex; };于是我们声明了一个结构体:
它有一个int类型的学号,一个长为20的char数组类型的名字,还有一个bool值表示性别
结构体内也可以有数组、指针
结构体内还可以有其他结构体
结构体内更可以有结构体本身!(但只能是指针
相同类型的结构体是可以用=赋值的!!! -
struct的定义
像之前我们已经声明了一个叫struct student的结构体,那它有什么用吗?
好看
当然是用来定义结构体啦
定义有两种方法://在声明同时定义 struct student{ int num; char name[22]; bool sex; }Xiao Ming;//定义 struct student stu[100];在C++中 可以直接用
结构名称+变量名的形式定义 -
结构体成员的使用
有两种方式
结构体名.成员
结构体名->成员 -
struct的大小
你需要先知道一点关于数据类型所占空间的芝士(略首先 struct自身是不占空间的
然后 让我们来看看sizeof(struct student)是多少吧:【图片待补】
??28??
应该是4+22*1+1=27啊
下面来进行实验:
一. 把char数组开到23 结果:28 ;
二. 把char数组开到24 结果:32 ;
三. 把数组开回22 再声明一个long long 结果:40 ;
现实是这样的:struct要进行“对齐”处理
不明白是吧? 让我来生动形象地解释一下我们设struct中单个数据类型占用的最大空间为
x
则struct的大小就是nx
且(n-1)x 大小的空间装不下struct里的数据类型所占的空间例如struct里有个占空间很大的long long,结构体就会8个字节8个字节地开存储空间,直到把所有的成员都装下
让我们先引入一个例题
众所周知,C++中有许许多多的变量类型,但唯独没有分数
现在给你两个形如
保证两分数的分子分母均不为
输出要求:如果是整数,则输出整数;如果分数是负数,符号和分子一起输出
先上两个式子:
乘除法就不用说了吧...
明白了题目后,我们很快地就可以写出一个结构体
struct Fraction{
int a,b;
};
接下来的大多知识,我们都会围绕着这个题来进行讲解
struct与函数
-
子函数里的struct
函数里是可以传入结构体的,当然也可以返回结构体,更可以对结构体进行一些奇奇怪怪的处理
下面举出三个例子:void reduction(Fraction &u){ //约分 if(u.b<0) u.b=-u.b,u.a=-u.a; int _a=abs(u.a); int k=gcd(_a,u.b); u.a/=k,u.b/=k; }Fraction add(Fraction &u,Fraction &v){ Fraction f; if(u.b==v.b) f.a=u.a+v.a,f.b=u.b; else f.a=u.a*v.b+v.a*u.b,f.b=u.b*v.b; reduction(f); return f; }void print(Fraction &u){ if(u.b==1) cout<<u.a; else cout<<u.a<<"/"<<u.b; } -
struct里定义函数