【从零开始的嵌入式生活】必备基础知识7——函数(1)

简介: 【从零开始的嵌入式生活】必备基础知识7——函数(1)

文章目录

 前言

 一、函数的基本用法

             1.函数的声明、实现

             2.函数的调用(函数的使用)

 二、函数的参数传递

             1.全局变量

             2.复制传递方式

             3.地址传递方式

             4.二维数组的求和

 三、指针函数

 四、递归函数

 五、函数指针

 写在最后

一、函数的基本用法

函数是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空值(无返回函数)。

下面是我们常用的函数:


1.函数的声明、实现

一般形式:


<数据类型>  <函数名称>( <形式参数说明> ) {
           语句序列;
           return[(<表达式>)];
}


注意点:


<数据类型>是整个函数的返回值类型。return[(<表达式>)]语句中表达式的值,要和函数的<数据类型>保持一致。如无返回值应该写为void型

<形式参数说明>是逗号”,”分隔的多个变量的说明形式(可以无参数)

大括弧对 {<语句序列> },称为函数体;

函数的说明就是指函数原型:在函数的定义在mian后面需要在main前面进行声明


double Power(double a,int x);
double  Power(double, int);


2.函数的调用(函数的使用)

函数的调用必须在声明之后!!!!!如果不想大段的声明在前面可以放后面,前面先进行声明。


函数名称(〈实际参数〉)


实参就是在使用函数时,调用函数传递给被调用函数的数据。需要确切的数据

函数调用可以作为一个运算量出现在表达式中,也可以单独形成一个语句。对于无返回值的函数来讲,只能形成一个函数调用语句。

头文件就是包含了函数原型的声明和定义,所以需要先引入头文件。


二、函数的参数传递

函数的传递方式:(非常重要且容易出错)


全局变量

复制传递方式

地址传递方式

1.全局变量

全局变量就是在函数体外说明的变量,它们在程序中的每个函数里都是可见的


全局变量一经定义后就会在程序的任何地方可见。函数调用的位置不同,程序的执行结果可能会受到影响。(并且容易变成临界区资源,所以不建议使用)


2.复制传递方式

调用函数将实参传递给被调用函数,被调用函数将创建同类型的形参并用实参初始化


形参是新开辟的存储空间,因此,在函数中改变形参的值,不会影响到实参


3.地址传递方式

按地址传递,实参为变量的地址,而形参为同类型的指针


被调用函数中对形参的操作,将直接改变实参的值(被调用函数对指针的目标操作,相当于对实参本身的操作)


4.二维数组的求和

数组名的本质就是指针,在传参的时候需要传数组长度。

举个例子希望大家可以理解:


int  fun(int n, int m, int (*a)[m]);
int main()
{
  int a[][3] = {{1, 9, 7}, {3, 4, 6}};
  int sum = 0;
  sum = fun(2, 3, a);
  printf("sum=%d\n", sum);
  return 0;
}
int  fun(int n, int m, int (*a)[m]) {
  int i, j, ret = 0;
  for (i = 0; i < n; i++) {
  for (j = 0; j < m; j++) {
    ret += a[i][j];
  }
  }
  return ret;
}


相关文章
|
7月前
|
算法 项目管理 C语言
嵌入式 C 语言大神的进阶之路
嵌入式 C 语言大神的进阶之路
79 0
|
3月前
|
机器人 Linux 开发工具
小白必看!入门嵌入式你需要了解这些!
【9月更文挑战第23天】在科技迅速发展的今天,嵌入式系统已广泛应用,覆盖了从智能家居到工业自动化等多个领域。本文将向你介绍嵌入式系统的基础概念,其特点,应用范围,并指导你如何掌握必要的知识和技能,包括电路基础、C语言编程、微处理器架构等,以及推荐的学习路径与方法。对于初学者来说,这是一份不错的指南。
|
7月前
|
传感器 设计模式 安全
嵌入式底层驱动需要知道的基本知识
嵌入式底层驱动需要知道的基本知识
162 0
|
传感器 C语言 芯片
「入门指南」轻松学习嵌入式 GPIO:从原理到应用一步到位
「入门指南」轻松学习嵌入式 GPIO:从原理到应用一步到位
|
监控 网络协议 网络安全
【从零开始的嵌入式生活】网络编程1——网络基础
【从零开始的嵌入式生活】网络编程1——网络基础
【从零开始的嵌入式生活】网络编程1——网络基础
|
芯片
嵌入式基础知识
视觉项目落地少不了的是嵌入式相关知识
247 0
嵌入式基础知识
|
Serverless
【从零开始的嵌入式生活】必备基础知识7——函数(2)
【从零开始的嵌入式生活】必备基础知识7——函数(2)
【从零开始的嵌入式生活】必备基础知识7——函数(2)
|
存储 C语言 索引
【从零开始的嵌入式生活】必备基础知识6——指针
【从零开始的嵌入式生活】必备基础知识6——指针
【从零开始的嵌入式生活】必备基础知识6——指针
|
机器学习/深度学习 算法 Linux
【从零开始的嵌入式生活】必备基础知识3——输入输出
【从零开始的嵌入式生活】必备基础知识3——输入输出
【从零开始的嵌入式生活】必备基础知识3——输入输出
【从零开始的嵌入式生活】必备基础知识4——控制语句(2)
【从零开始的嵌入式生活】必备基础知识4——控制语句(2)
【从零开始的嵌入式生活】必备基础知识4——控制语句(2)