C语言 - 函数的本质与递归函数_一个源文件为什么可以由多个函数组成

-> 尽量少碰全局变量:函数最好用传参返回值来和外部交换数据,不要用全局变量。

3.函数是动词、变量是名词

-> 函数将来被编译成可执行代码段,变量(主要指全局变量)经过编译后变成数据或者在运行时变成数据。一个程序的运行需要代码和数据两方向的结合才能完成。

-> 代码和数据需要彼此配合,代码是为了加工数据,数据必须借助代码来起作用。

4.函数的实质是:数据处理器

-> 函数就是程序的一个缩影,函数的参数列表其实就是为了给函数输入原材料数据,函数的返回值和输出型参数就是为了向外部输出目标数据,函数的函数体里的那些代码就是加工算法

-> 程序的编写和运行就是为了把原数据加工成目标数据,所以程序的实质就是一个数据处理器。

5.函数三要素:定义、声明、调用

-> 函数的定义就是函数体、函数声明是函数原型、函数调用就是使用函数。

-> 函数定义是函数的根本,函数定义中的函数名表示了这个函数在内存中的首地址,所以可以用函数名来调用执行这个函数(实质是指针解引用访问);函数定义中的函数体是函数的执行关键,函数将来执行时主要就是执行函数体。所以一个函数没有定义就是无基之塔。

-> 函数声明的主要作用是告诉编译器函数的原型。

6.函数原型和作用

-> 函数原型的主要作用就是给编译器提供原型,让编译器在编译程序时帮我们进行参数的静态类型检查。

-> 编译器在编译程序时是以单个源文件为单位的(所以一定要在哪里调用在哪里声明),而且编译器工作时已经经过预处理处理了,最最重要的是编译器编译文件时是按照文件中语句的先后顺序执行的

-> 编译器从源文件的第一行开始编译,遇到函数声明时就会收到编译器的函数声明表中,然后继续向后。当遇到一个函数调用时,就在我的本文件的函数声明表中去查这个函数,看有没有原型相对应的一个函数。

#include <stdio.h>

int add(int a, int b);					// 函数声明	

int main(void)
{
	int a = 3, b = 5;
	int sum = add(a, b);				// 典型的函数调用
	printf("3+5=%d.\n", add(3, 5));		// add函数的返回值作为printf函数的一个参数
	
	return 0;
}

// 函数定义
int add(int a, int b)		// 函数名、参数列表、返回值
{
	return a + b;			//函数体
}


7.递归函数

-> 递归函数就是函数中调用了自己本身这个函数的函数。

-> 递归函数和循环的区别。递归不等于循环。

-> 递归函数解决问题的典型就是:求阶乘、求斐波那契数列。

// 用递归函数来计算阶乘
#include <stdio.h>

int jiecheng(int n);		// 函数声明
void digui(int n);

int main(void)
{
	digui(300);

	//int a = 5;
	//printf("%d的阶乘是:%d.\n", a, jiecheng(a));

	return 0;
}

// 函数定义
int jiecheng(int n)
{
	// 传参错误校验
	if (n < 1)
	{
		printf("n必须大于等于1.\n");
		return -1;
	}
	
	if (n == 1)
	{
		return 1;
	}
	else
	{
		return (n * jiecheng(n-1));
	}
}

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/609e492653bd0ea0aec0050ff9c4da0b.png)

![img](https://img-blog.csdnimg.cn/img_convert/325169f4538cb96893a19c858118ae5c.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/eda74e5a7b812a74abc6814247cf5551.png)

 **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

![img](https://img-blog.csdnimg.cn/img_convert/9922187cc13480764af4ee1eda5c33ff.png)

![img](https://img-blog.csdnimg.cn/img_convert/93d0533de041ccbeac676673a33079e5.png)

 

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)**

<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

**[更多资料点击此处获qu!!](https://bbs.csdn.net/topics/618376385)**
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值