学嵌入式和C语言编程|第七天:循环嵌套、循环辅助语句与数组
前言
今天继续 C 语言基础学习,前面掌握了四种基础循环,现在学习循环嵌套、break、continue、return这些循环辅助关键字,之后进入数组章节。数组在嵌入式开发中使用频率极高,保存传感器批量数据、串口接收缓冲区、表格参数全部都离不开数组,是必须吃透的知识点。
一、循环嵌套
执行流程
外层循环每执行1 次,内层循环完整执行一整轮。
举个简单理解:外层循环走一步,内层循环从头到尾跑完一遍。 |
二、循环辅助语句
关键字 | 作用说明 | 重点注意事项 |
break | 循环断路语句,跳出当前这一层循环 | 多层循环嵌套的时候,仅退出自己所在的那一层循环,不会直接退出全部外层循环 |
continue | 循环短路语句,跳过本次循环剩余代码 | 本次循环直接结束,直接进入下一轮循环判断,不会终止整个循环 |
return | 跳出当前整个函数 | 写在 main 主函数内,执行 return,整个程序直接结束运行 |
小提示:很多新手容易混淆break与continue,break 是彻底离开循环;continue 只是跳过这一遍,循环还要继续跑。 |
三、四大循环回顾(补充 goto)
承接上一天学习内容,完整汇总四种循环 |
for 循环
c |
- 表达式 1:循环初始条件
- 表达式 2:循环执行条件,为真执行循环体,为假跳出
- 表达式 3:促使循环走向结束的条件
- for(;;)代表死循环;三个表达式语法允许省略,但逻辑条件不能丢;括号后面禁止加分号。
while 循环
c |
- 初始化写在 while 前面;结束变化代码写在循环体内部;
- while(1)死循环,嵌入式 main 主函数最常用;括号后不要加分号。
do…while 循环
c |
- 先执行循环体,再做条件判断;循环体最少执行 1 次;
- while 末尾的分号不能漏掉。
goto 实现循环
c |
- 依靠自定义标签跳转实现循环,不属于结构化循环;
- 适合快速跳出多层嵌套循环、异常出错处理;
- 规范:只做局部使用,禁止跨函数滥用 goto。
四、数组
定义:数组用来保存多个相同数据类型的数据,数组类型不能为void。 |
1、数组基础
数组定义格式
c |
- 类型说明符:基础数据类型,决定数组里面存什么类型数据
- 数组名:数组的名字,命名遵守标识符命名规则
- [常量]:代表数组里面能够存放元素的总个数
- 获取数组占用字节:sizeof(a)
数组元素访问
格式:数组名[下标]
- 下标从0 开始;数组 10 个元素,下标范围:0~9,访问第 10 个元素写a[9]
- []里面:常量、变量、表达式都可以,运算结果必须是整数
- ⚠️越界风险:下标从 0 到元素个数‑1,如果超过这个范围,数组访问越界,程序会发生未知错误。
2、数组初始化
数组名代表数组整体类型,不能直接给数组名整体赋值,只能初始化或者逐个元素赋值。
全部初始化
c |
所有元素全部给出初始值。
局部初始化
c |
只写一部分初始数据,没有赋值的元素,系统自动初始化为 0。
全部初始化为 0
c |
如果完全不初始化:数组内存存放随机杂乱值。
3、数组的存储性质
- 连续性:数组在内存中,占用一段连续的内存空间。
- 单一性:数组内部全部元素,数据类型完全一致。
- 有序性:数组元素按下标a[0] ~ a[n‑1]顺序依次存储。
4、数组越界重点
- 初始化数据数量 > 数组本身元素个数:发生越界,语法报错。
- 访问数组元素,[]里面下标超出合法访问范围,发生数组越界,编译器不一定报错,但是程序运行结果不可预测,嵌入式项目中数组越界是高频 bug 来源。
五、今日学习总结
- 循环嵌套记住规则:外层跑一次,内层完整跑一轮;
- break退出当前层循环;continue跳过本次循环;return直接退出函数;
- 数组下标从 0 开始,总个数 N,下标最大是 N‑1,数组越界是新手高频坑点;
- 数组局部初始化,未赋值元素系统自动填 0;不能对已经定义完成的数组整体直接赋值;
- 嵌入式开发,数组多用于传感器缓存、串口接收缓冲区,写代码时刻警惕下标越界。