函数的总结,递归有链接(ง •_•)ง

目录

1.函数的组成

2.函数调用

(1)传值调用

(2)传址调用

3.函数的嵌套调用

4.函数递归

5.函数的声明和定义


函数是什么:

  函数是用于完成特定任务的程序代码的自包含单元。

为什么使用函数:

1.可以省去重复代码的编写。

2.使程序更加模块化,有利于程序的阅读,修改和完善。


函数有自定义函数与库函数,这里主要记录自定义函数的使用,库函数的学习大伙可在http://www.cplusplus.com/   这里学习。


1.函数的组成

C语言函数的一般形式为:

类型标识符     函数名(形参列表)           //函数首部

{     声明部分                                              //函数体

     语句                                                       //函数体

}                                                                  //函数体

栗子:求两数最大值

int get_max(int x, int y)
{
	if (x > y)
		return x;
	else
		return y;
}

函数名可以自己设置,最好是有意义的,易于理解,当然也可以注释说明。

2.函数调用

(1)传值调用

#include 

int get_max(int x, int y)
{
	if (x > y)
		return x;
	else
		return y;
}

int main()
{
	int a = 10;
	int b = 20;
	int max=get_max(a, b);               //函数名() 为函数调用  a b为实参,向函数里面传参
	printf("max=%d\n",max);
	return 0;
}

函数的总结,递归有链接(ง •_•)ง_第1张图片

 int max=get_max(a, b);

这里a b 将会传入函数get_max里,形式参数 x y 对a b的值复制(仅仅是值的复制,地址不同),进行函数体内的语句计算,并通过return 返回,用 整型变量 max 接收 函数返回值。

传值调用 形式参数与实参的地址不同:

函数的总结,递归有链接(ง •_•)ง_第2张图片

地址不同,因此函数处理的10和20 不是原 a b 的10和20 。

a 和 b将他们的值传给形参,形参的x y的复制a b变成了10和20。

在形参 x y 的地址里的10 20 进行运算,最后return x y的值,max接收。

(2)传址调用

当函数没有return 进行形参返回时,函数进行的只是形式参数的运算,与实参没有任何联系。

这里用交换两数的值来进行比较:

先用传值调用来运行:

#include 

void Swap1(int x,int y)
{
	int tem = 0;
	tem = x;
	x = y;
	y = tem;
}

int main()
{
	int a = 10;
	int b = 20;
	Swap1(a, b);
	printf("a=%d b=%d\n", a, b);
	return 0;
}

函数的总结,递归有链接(ง •_•)ง_第3张图片

 可以看到结果与我们预想的a=20,b=10不同,监视地址:

函数的总结,递归有链接(ง •_•)ง_第4张图片

可以看到当结束运行时,我们打印的是a b的值,但交换的是x y 的值

形参的交换并没有变成实参的交换。

接下来我们用传址调用:

#include 

void Swap2(int *pa, int *pb)
{
	int tem = 0;
	tem = *pa;
	*pa = *pb;
	*pb = tem;
}

int main()
{
	int a = 10;
	int b = 20;
	Swap2(&a,&b);
	printf("a=%d b=%d\n", a, b);
	return 0;
}

函数的总结,递归有链接(ง •_•)ง_第5张图片

这里我们向函数里传入地址,用指针接收,监视地址如下:

函数的总结,递归有链接(ง •_•)ง_第6张图片

我们可以看到a b的地址与形参pa pb地址相同,且当*pa和*pb的值互换后,a b的值也发生交换,这就证明了在没有返回形参的情况下,传址调用可以让 实参与形参建立真正的联系,不再是复制为临时变量的关系。函数内部可以直接操 作函数外部的变量。

3.函数的嵌套调用

这就很简单了,就是在一个函数里面调用另一个函数  栗子:

#include 
void line()
{
	printf("你好\n");
}

void threeline()
{
	int i = 0;
	for (i = 0; i<3; i++)
	{
		line();               //循环调用三次,则打印三次
	}
}

int main()
{
	threeline();
	return 0;
}

函数的总结,递归有链接(ง •_•)ง_第7张图片

4.函数递归

      链接在这:  函数递归(套娃)_i跑跑的博客-CSDN博客   

                                           函数的总结,递归有链接(ง •_•)ง_第8张图片

5.函数的声明和定义

较短的代码用在一个源文件里没用问题,但在写长代码时,函数的声明,定义内容是分别在头文件和另一个源文件里的,声明一般出现在函数的使用之前  满足先声明后定义

以求最大值为例:

函数的总结,递归有链接(ง •_•)ง_第9张图片

 函数的总结,递归有链接(ง •_•)ง_第10张图片

 函数的总结,递归有链接(ง •_•)ง_第11张图片

你可能感兴趣的:(笔记,c语言,开发语言,后端)