结构体教学

有什么建议的话写在讨论区

一、先搞懂:为什么需要结构体?​

普通变量(如int a、string name)只能存储单一类型的数据,但现实中很多事物需要 “多个不同类型数据” 描述:​

  • 描述一个学生:需要学号(int)、姓名(string)、成绩(float)、生日(年 / 月 / 日,又是 3 个 int);​
  • 描述一本书:需要编号(int)、书名(string)、价格(double)、作者(string)。​

如果用普通变量,存 1 个学生要定义int id; string name; float score;...,存 100 个学生就要定义 100 组,代码会极其混乱。​

结构体(struct)的核心作用:把多个不同类型的变量 “打包” 成一个新的 “自定义类型”,像用 “模板” 一样批量创建统一格式的数据。​

二、结构体的基础:定义与变量声明​

1. 结构体的定义语法​

c取消自动换行复制

struct 结构体名 {​

数据类型1 成员变量1; // 成员可以是int、string、float等任意类型​

数据类型2 成员变量2;​

// ... 更多成员​

}; // 注意:分号不能漏!​

示例:定义 “学生” 结构体​

cp取消自动换行复制

#include <string> // 用string类型需要包含此头文件​

struct Student {​

int id; // 学号(整数)​

string name; // 姓名(字符串)​

float score; // 成绩(浮点数)​

int birthYear; // 出生年​

}; // 分号必须加!​

2. 声明结构体变量(3 种方式)​

定义结构体后,需要声明 “变量” 才能使用,就像int a是声明 int 类型变量一样。​

方式 1:定义结构体时直接声明​

c取消自动换行复制

方式 2:定义后单独声明​

cpp取消自动换行复制

方式 3:动态声明(用 new,存放在堆区)​

cp取消自动换行复制

三、结构体的核心:访问成员变量​

声明变量后,需要访问它的 “成员”(如 stu1 的 id、name),用点运算符(.) 或箭头运算符(->)。​

1. 普通变量:用点运算符(.)​

cp取消自动换行复制

输出结果:​

plaintext取消自动换行复制

2. 指针变量:用箭头运算符(->)​

如果是结构体指针,必须用->访问成员(或先解引用*p再用.,但->更简洁):​

cpp取消自动换行复制

四、进阶 1:结构体变量的初始化​

声明变量时可以直接初始化,有两种常用方式:​

1. 按成员顺序初始化(需与结构体定义顺序一致)​

cpp取消自动换行复制

2. 按成员名初始化(C++11 及以上支持,顺序可乱)​

更灵活,推荐使用:​

cpp取消自动换行复制

五、进阶 2:结构体数组(存多个同类数据)​

如果需要存多个学生(如一个班级 30 人),用 “结构体数组” 最方便:​

cpp取消自动换行复制

六、进阶 3:结构体作为函数参数​

结构体变量可以像普通变量一样传给函数,有两种传递方式:​

1. 值传递(拷贝一份数据,不影响原变量)​

cpp取消自动换行复制

2. 引用传递(传地址,修改会影响原变量,更高效)​

如果结构体成员多,值传递会拷贝大量数据,推荐用引用(&) 传递:​

cpp取消自动换行复制

七、综合案例:简易学生信息管理​

需求:录入 3 个学生信息,计算平均成绩,并输出成绩≥90 的学生。​

cpp取消自动换行复制

八、常见错误与注意事项​

  1. 忘记写分号:结构体定义结尾的;必须加,否则编译报错。​
  1. 指针访问用错运算符:结构体指针必须用->,普通变量用.,不能混。​
  1. 初始化顺序混乱:按顺序初始化时,必须与结构体成员定义顺序一致;按成员名初始化无此问题。​
  1. 内存泄漏:用new声明的结构体指针,使用后必须delete,否则内存泄漏。​
  1. 数据类型不匹配:给成员赋值时,类型要一致(如不能把字符串赋值给 int 类型的 id)。​

九、小结​

结构体的核心是 “自定义复合类型”,解决了 “多类型数据整合” 的问题,关键知识点:​

  1. 定义:struct 结构体名 {成员列表};​
  1. 变量:普通变量(. 访问)、指针变量(-> 访问)、数组(批量存储)​
  1. 进阶:初始化(按顺序 / 按成员名)、函数参数(值传递 / 引用传递)​
  1. 应用:常用于存储对象信息(学生、员工、图书等),是后续学习类(class)的基础。​
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值