今天我们来学习c++入门到入土第七节课——不花钱
上一节课,我们讲到了数组,这节课我们来讲结构体****
我们先来解答一下问题:
1.@王钰宸涵 C语言联合体详解-CSDN博客 给你个资源自己看吧,下一节课会讲解联合体的
2.@黄飞栋 enum
是有的C enum(枚举) | 菜鸟教程 给你个资源自己看把
3.@栗子酱 union
,我觉得就是省了空间结构体(struct)和联合体(union)的区别_结构体和联合体的区别-CSDN博客 给你个资源自己看吧
4.通知:因寒假就要结束了,所以有时候会一两个月不更新,请谅解
您如有问题的话,可以回复我哦!
我会取前三个问题回答哦
结构体
结构体(struct),可以看做是一系列称为成员元素的组合体。
可以看做是自定义的数据类型。
定义结构体
struct 名字
{
类型 变量名
……
……
……
} 数组名/指针名/变量名/……(此处不一定要写);
例如:
struct node
{
int data;
int flag;
};
const node a;
node b,B[数组长度],c;
node *d;
上例中定义了一个名为 node
的结构体,两个成员元素 data, flag
,类型都为 int
。
在 }
后,定义了数据类型为 node
的常量 a
,变量 b
,变量 c
,数组 B
,指针 d
。
对于某种已经存在的类型,都可以使用这里的方法进行定义常量、变量、指针、数组等。
定义指针
如果是定义内置类型的指针,则与平常定义指针一样。
如果是定义结构体指针,在定义中使用 StructName*
进行定义。
struct node
{
/* ... */
node* nxt;
};
上例仅作举例,不必纠结实际意义。
访问/修改成员元素
可以使用 变量名.成员元素名
进行访问。例如可以使用 cout << var.v
来输出 var
的 v
成员。
也可以使用 指针名->成员元素名
或者 使用 (*指针名).成员元素名
进行访问。例如使用 (*ptr).v = tmp
或者 ptr->v = temp
可以将结构体指针 ptr
指向的结构体的成员元素 v
赋值为 temp
:。
e## 为什么需要结构体?
首先,条条大路通罗马,可以不使用结构体达到相同的效果。但是结构体能够显式地将成员元素(在算法竞赛中通常是变量)捆绑在一起,如本例中的 node
结构体,便将 data,flag
放在了一起(定义这个结构体的实际意义是表示一个数字的值和是否被选过)。这样的好处边是限制了成员元素的使用。
想象一下,如果不使用结构体而且有两个数组 data[], fall\g[]
,很容易写混淆。但如果使用结构体,能够减轻出现使用变量错误的几率。
并且不同的结构体(结构体类型,如 node
这个结构体)或者不同的结构体变量(结构体的实例,如上方的 e
数组)可以拥有相同名字的成员元素(如 temp.data,b.data
),同名的成员元素相互独立(拥有独自的内存,比如说修改 temp.data
不会影响 b.data
的值)。
这样的好处是可以使用尽可能相同或者相近的变量去描述一个物品。比如说 node
里有 data
这个成员变量;我们还可以定义一个 Car
结构体,同时也拥有 data
这个成员;如果不使用结构体,或许我们就需要定义 dataOFOBJECT[] dataOFJECT[]
等不同名称的数组来区分。
如果想要更详细的描述一种事物,还可以定义成员函数。请参考 类 获取详细内容。
更多的操作?
详见 类。
注意事项
为了访问内存的效率更高,编译器在处理结构中成员的实际存储情况时,可能会将成员对齐在一定的字节位置,也就意味着结构中有空余的地方。因此,该结构所占用的空间可能大于其中所有成员所占空间的总和。
在定义结构体的时候,千万千万千万千万千万千万千万不要忘记最后的}
后要加;
,不然就会这样:
一定要这样:
下一节课—— 联合体等等
点赞,点赞,点赞!!!!!!!
球球了!!!!
求求了!!!!
QwQ QwQ