当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 学习笔记 > 嵌入式学习笔记:函数入门知识总结

嵌入式学习笔记:函数入门知识总结 时间:2018-09-13      来源:未知

函数的意义

函数是一段程序,可以完成一个功能,例如:printf

提高程序的通用性,减少重复的代码(具有相似功能的代码)

实现模块化设计的基础

1.2函数的分类

main()函数,每个程序都必须要实现的,程序从main()函数开始执行,从main()函数结束

库函数:由系统已经实现的函数,例如:printf

自定义函数:用户自行设计并实现

1.3函数的使用

以math(数学库)为例,用man math.h查看库中函数

注意:必须有头文件:#include

例子1:pow()

函数功能:计算x的y次方,可使用man pow可查看pow()函数的使用方法

函数模型:double pow(double x,double y)

提供的信息:需要的参数,返回的结果的类型

使用函数的语法:函数名(参数列表)

实际情况

例子2:sqrt()

函数的功能:计算一个数的平方根

函数原型:double sqrt() //

提供的信息:需要提供一个double类型的参数

使用函数提供的参数可以是常量,变量,表达式

注意:使用数学库在编译时候必须使用 gcc select.c –lm

pow,sqrt为double型

补充:常见数学函数

1.4函数的执行过程

一旦程序中包含其他函数的调用(使用),执行到对应的函数调用的语句时,跳转到对应的函数执行,执行完毕后会返回调用的语句的下一条语句继续执行

具体实现过程:

1.5函数的定义

1.51函数的定义:函数的实现,需要我们设计函数对应的功能,参数,以及返回值

1.52定义的语法:

类型标识符 函数名(形式参数类型说明列表)

{

函数体

}

注:类型标识符:说明函数返回值的类型

函数名:符合命令规则即可,函数入口地址

形式参数说明列表:函数执行时需要提供的参数

函数体:具体的功能实现

():函数的标识

1.53设计过程:

(1)函数的原型设计:函数的名字,参数,返回值的类型确定

注意:需要将函数的原型设计写在调用(使用)之前,为了编译器对函数调用语句进行语法检查,

例如:int max(int x, int y);

注意:函数的声明处需要加分号

(2)函数的函数体的设计:函数的名字,参数,返回值类型的确定

函数具体功能的实现

注意:一个函数中,不能嵌套定义另外一个函数,

完整实例:

1.6函数的形式参数

表示函数所需要的参数

形式参数写在函数定义与声明中形式列表中

类型标识符 函数名(类型1 参数名1,类型2 参数名2…..)

每个形式参数都必须写参数名与类型

正确写法:int add(int x,int y)

错误写法:int add(int x,y)

形式参数一般每变量名

1.7函数的实际参数

表示函数提供的参数

实际参数是在函数调用时写在括号中的实际参数列表

函数名(实际参数1,实际参数2…..)

例如:add(3,4,5)

1.8值传递

将实际参数的值传递给形式参数

在传递值采用一一对应的方式

如:形参1=实参1 形参2=实参2….

只能将实际参数的值传递给形式参数,且只能单向传递

实际参数与形式参数之间,保持类型、个数、顺序一致

1.9无参函数

没有形式参数的函数,在形式参数类表中使用void表示(标准规范)

注意:调用时候,括号中不需要写void

实例:

1.10函数的返回值

如果一个函数需要返回运算结果,使用return关键字

return可以为变量或表达式或常量

函数允许没有return,正对没有返回值的函数,不能return一个值,函数执行完毕后,自动返回

例如:

注意:return的值原则上需要与声明的返回值的类型保持一致

如果没有返回值,就写void

 

补充:return的作用:1.返回一个值

终止函数的执行,立即返回

1.11注意及补充

1.变量的作用域:表示一个变量的作用范围

变量的生命周期:表示一个变量在内存中存在的时间

局部变量:一般定义在函数的内部(包括形式参数)

作用域:一般从定义的位置开始,到对应的{}结束

生命周期:从定义的位置开始,到超过作用域之后结束

从分配空间(定义时)到释放空间(超过作用域)的时间

全局变量:定义在函数外部

作用域:从定义的位置开始,到整个源文件结束

生命周期:从定义的位置开始,到整个程序执行结束

补充:程序加载到内存中之后,将数据分不同的类型分开存储,不同的区域存储不同的类型

栈区:存储局部变量

数据区:存储静态变量(使用static int a)

作用:以提高局部变量的生命周期(从定义的位置开始,一直到函数执行结束)但是没有改变作用域,且只会初始化一次,对应的值一直存在

注意:函数的形式参数属于局部变量,不同函数的形式参数即使同名,在内存空间中是不同的

不同函数中使用相同名字的局部变量,在内存中同样拥有不同的存储空间

形式参数不会影响实际参数

局部变量,静态变量,全局变量都是根据作用域,生命周期来进行区分

自动变量(auto),静态变量(static)根据存储区域来进行区分

默认情况变量的存储类型为auto,属于自动局部变量,超过作用域,生命周期就结束

√符号常量:在c语言中使用#define关键字来定义,提高程序的通用性

使用:#define 符号标识名 常量值(表达式)

#define SIZE 5

原理:在预编译阶段进行符号标识的替换,将程序所有引用的符号表示替换成后面的值

流程:源程序(test.c)--预编译(处理预处理命令,以#开头)---编译(c—cpu指令)---汇编---链接(test.0,ptintf.o)--可执行文件

2. goto 语句:跳转到指定的标识符去执行

例子:

3.技巧性:在ubuntu中ctrl+v进行选中后,按=可对齐所选行列

4.应用性:计算二维数组的行列和时,可使用以下方法

5. bool 类型:在c语言中用于表示真和假的类型,在内存中的值为 1 和 0

使用 true(1) 与 false(0)表示

使用方法:

① 定义头文件:#include

② 使用函数:

6技巧性:用于显示重复的数字,字母等时,要灵活使用数组下标

具体案例:



 

 

上一篇:嵌入式学习笔记:二维数组定义与使用

下一篇:嵌入式学习笔记:指针和指针变量的区别(指针知识点大全)

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部