学嵌入式和C语言编程|第七天:循环嵌套、循环辅助语句与数组

前言

今天继续 C 语言基础学习,前面掌握了四种基础循环,现在学习循环嵌套、breakcontinuereturn这些循环辅助关键字,之后进入数组章节。数组在嵌入式开发中使用频率极高,保存传感器批量数据、串口接收缓冲区、表格参数全部都离不开数组,是必须吃透的知识点。

一、循环嵌套

执行流程

外层循环每执行1 次,内层循环完整执行一整轮

举个简单理解:外层循环走一步,内层循环从头到尾跑完一遍。

二、循环辅助语句

关键字

作用说明

重点注意事项

break

循环断路语句,跳出当前这一层循环

多层循环嵌套的时候,仅退出自己所在的那一层循环,不会直接退出全部外层循环

continue

循环短路语句,跳过本次循环剩余代码

本次循环直接结束,直接进入下一轮循环判断,不会终止整个循环

return

跳出当前整个函数

写在 main 主函数内,执行 return,整个程序直接结束运行

小提示:很多新手容易混淆breakcontinue,break 是彻底离开循环;continue 只是跳过这一遍,循环还要继续跑。

三、四大循环回顾(补充 goto)

承接上一天学习内容,完整汇总四种循环

for 循环

c
for(表达式1 ; 表达式2 ; 表达式3)
{
语句(循环体);
}

  • 表达式 1:循环初始条件
  • 表达式 2:循环执行条件,为真执行循环体,为假跳出
  • 表达式 3:促使循环走向结束的条件
  • for(;;)代表死循环;三个表达式语法允许省略,但逻辑条件不能丢;括号后面禁止加分号

while 循环

c
while(表达式)
{
循环体;
}

  • 初始化写在 while 前面;结束变化代码写在循环体内部;
  • while(1)死循环,嵌入式 main 主函数最常用;括号后不要加分号。

do…while 循环

c
do
{
循环体;
}while(表达式);

  • 先执行循环体,再做条件判断;循环体最少执行 1 次
  • while 末尾的分号不能漏掉。

goto 实现循环

c
tag:
业务代码;
if(条件)
goto tag;

  • 依靠自定义标签跳转实现循环,不属于结构化循环;
  • 适合快速跳出多层嵌套循环、异常出错处理;
  • 规范:只做局部使用,禁止跨函数滥用 goto。

四、数组

定义:数组用来保存多个相同数据类型的数据,数组类型不能为void
口诀:高内聚,低耦合

1、数组基础

数组定义格式

c
类型说明符 数组名 [常量];
int a[10];

  • 类型说明符:基础数据类型,决定数组里面存什么类型数据
  • 数组名:数组的名字,命名遵守标识符命名规则
  • [常量]:代表数组里面能够存放元素的总个数
  • 获取数组占用字节:sizeof(a)

数组元素访问

格式:数组名[下标]

  • 下标从0 开始;数组 10 个元素,下标范围:0~9,访问第 10 个元素写a[9]
  • []里面:常量、变量、表达式都可以,运算结果必须是整数
  • ⚠️越界风险:下标从 0 到元素个数‑1,如果超过这个范围,数组访问越界,程序会发生未知错误。

2、数组初始化

数组名代表数组整体类型,不能直接给数组名整体赋值,只能初始化或者逐个元素赋值。

全部初始化

c
int a[10]={1,2,3,4,5,6,7,8,9,0};

所有元素全部给出初始值。

局部初始化

c
int a[10]={1,2,3,4,5};

只写一部分初始数据,没有赋值的元素,系统自动初始化为 0

全部初始化为 0

c
int a[10]={0};

如果完全不初始化:数组内存存放随机杂乱值。

3、数组的存储性质

  1. 连续性:数组在内存中,占用一段连续的内存空间
  2. 单一性:数组内部全部元素,数据类型完全一致。
  3. 有序性:数组元素按下标a[0] ~ a[n‑1]顺序依次存储。

4、数组越界重点

  1. 初始化数据数量 > 数组本身元素个数:发生越界,语法报错。
  2. 访问数组元素,[]里面下标超出合法访问范围,发生数组越界,编译器不一定报错,但是程序运行结果不可预测,嵌入式项目中数组越界是高频 bug 来源。

五、今日学习总结

  1. 循环嵌套记住规则:外层跑一次,内层完整跑一轮;
  2. break退出当前层循环;continue跳过本次循环;return直接退出函数;
  3. 数组下标从 0 开始,总个数 N,下标最大是 N‑1,数组越界是新手高频坑点
  4. 数组局部初始化,未赋值元素系统自动填 0;不能对已经定义完成的数组整体直接赋值;
  5. 嵌入式开发,数组多用于传感器缓存、串口接收缓冲区,写代码时刻警惕下标越界。