《嵌入式培训知识点总结》第十二天:函数参数与标识符的作用域与可见性
一、二维数组作为函数参数
1、形参—二维数组形式+行数(本质就是一堆数组的长度)
实参—数组名+行数
2、例题:
(1)函数封装打印二维数组;

(2)函数封装计算二维数组边框和;

(3)二维数组函数封装水平镜像;

(4)二维数组水平镜像调用一维数组逆序函数;

(5)求二维数组每行的平均值并放入一维数组b[i]中。

二、二维字符型数组作为函数参数
1、与二维整型数组使用方式相同;
形参—二维数组形式+行数(本质就是一堆数组的长度)
实参—数组名+行数
2、例题:
(1)函数封装打印二维字符型数组;
(3)逆序输出字符串;

三、标识符的作用域与可见性
(一)作用域
(名字作用的访问)
1、局部作用域:{}花括号范围内,具有局部作用域;
全局作用域:不在任何一个花括号{}发范围内(从定义的开始到文件结束都可用);
注:C语言中所有的函数名具有全局作用域;
C语言所有局部作用域被包含在全局作用域中。
2、局部变量—在局部作用域定义的变量;
全局变量—在全局作用域定义的变量;
3、注意事项:
(1)全局变量作用:为了实现函数的传参(不使用全局变量传参:程序耦合性过高),eg:

(2)C语言在开辟全局区(静态区)的变量时自动清0;
(二)标识符的可见性
可见性:某个标识符在某一点是否可见。
1.标识符必须先定义再使用;
2.在同一作用域中不得定义同名标识符;
3.在没有包含关系的不同作用域中定义的同名标识符互不影响(各自空间互不重叠);
4.在两个或多个具有包含关系的作用域中定义的同名标识符,外层标识符在内层不可见(就近原则),eg:

输出结果为: 1 10 100 10
(三)空间角度和时间角度看局部变量以及全局变量
1、空间角度
(1)局部变量特点:
局部变量空间一般都在开栈上,如果不初始化局部变量,局部变量中的值是随机值(垃圾值);
(2)全局变量特点:
全局变量空间在全局区,如果不初始化全局变量,全局变量的值默认初始化为0;
2、时间角度(变量的生存期)
生命周期可以理解为定义了int a什么时候a的空间被开辟,什么时候a的空间被销毁
(1)动态生存期:从程序运行到定义处开始存在,到程序运行到它作用的范围结束时销毁;
注:所以的局部变量都具有动态生存期。
(2)静态生存期:变量的生存期与程序的运行周期相同;
注:所有的全局变量和由static关键字修饰的静态变量都具有静态生存期;
全局变量和静态变量,不能用“变量”进行初始化。
四、 变量的存储类别
(一)static变量
1、一般形式:static int s_i;
其中s_i为静态(局部)变量,在静态区(全局区);
2、static关键字作用:
(1)static 将局部变量由原来的动态生存期改成静态生存区;
eg:动态的,输出结果均为10;加static修饰输出的为10 11。


注:static修饰的s_i具有静态生存期但是为局部作用域;
(2)在函数或全局变量前添加static关键字修饰是为了限制函数或全局变量的使用范围,只能在当前文件中使用,其他文件不能使用。
(二)auto变量
1、(有无auto关键字为一回事),定义的局部变量前默认添加auto关键字;
2、auto变量空间的开辟与销毁是自动的。
(三)register变量
1、register变量为寄存器变量,寄存器(存在CPU内部,与RAM相比读写效率更高)
2、一般形式:register int i;建议提高i的读写效率(此写法为一种建议毫无意义,接不接受建议取决于编译器)
3、考点:register关键词修饰的变量不可被寻址;
(四)extern变量
1、一般形式:extern int add(int a, int b);
表示对函数声明,声明的函数不在自己的.c文件中
2、extern关键字作用:函数声明部分前加extern关键字修饰;
注:声明时关键字不可省略(省略后可能分不清函数的定义与声明)。
3、eg:在main.c中调用func.c中的函数会出现警告,消除警告:需要在main.c文件中对被调函数作出声明(estern + 函数首部+ ;),表明声明的函数在其他文件(func.c)中。
五、扩展
1、:vsp func.c (左右开窗) :使用vi命令,开辟一个新的.c文件
2、:sp func.c (上下开窗) :使用vi命令,开辟一个新的.c文件
3、注意事项:不同代码位于不同的.c文件,编译时,需把所用的.c文件都写上 ,如,gcc main.c func.c
4、:set mouse=a 解除鼠标所有功能
5、:sp func.h 加入一个.h 文件,存放func.c文件中定义的函数的声明; 在main.c中加#include"func.h"(表明调用func.c源文件中的函数)
注意: 头文件不参与编译,头文件里只放声明不放定义
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)