《C/C++学习指南》语法篇—笔记 (七、函数)

函数

  • 具有一定功能的盒子:给它输入一些数据,返回一些数据

  • 函数的定义形式:

//name:函数名,字母数字和下划线组合
//arguments:参数,可带N个参数(N>0)。每个参数以逗号分开,例:int a, int b
//return_type:返回值类型。一个函数可以返回一个数值
//body:函数体,也是函数的具体实现
return_type name(arguments)
{
	body
}
  • 函数调用

调用时知道函数的三个信息:
(1)函数名
(2)参数个数、类型,多个参数逗号分开(注:参数个数、顺序、类型要匹配),若是满足隐式转换,则参数类型可以不同,比如int类型的参数,调用函数给输入double类型值。
(3)返回值类型 (注:返回值的类型要匹配)

函数的其他形式

  • 不带参数的函数:函数的参数个数可以是0个(也可以是很多个)
  • return的用法:(1)返回一个值;(2)函数退出。 return可以在函数体种的任何位置,可以在任意层次的复合语句,都可以直接退出函数并返回值。
  • 没有返回值的函数:当一个函数不需要返回值时,把返回值类型设置为void。当函数返回值为void时,也可以使用return;语句来退出函数。不能带数值。

函数的传值

在这里插入图片描述

void test(int a)
{
	a = a+1;
}
int main()
{
int n = 10;
test(n);  //只是把n的值传给了test函数,并不是把变量传给了函数,这个过程叫“传值”调用,传入的值,对变量的初始化,相当于执行 int a=n;操作。
printf("now:n=%d\n",n); //此时 n=10,而并不是11
return 0;
}

全局变量与局部变量

在C/C++种,根据变量定义的位置不同,分为两种:全局变量;局部变量

==全局变量(在函数外定义的变量):==在程序运行过程中始终存在,从main函数开始一直到退出;在各个函数种,均能访问(全局可见)。用于储存一些全局性数据。
==局部变量(在函数内定义的变量):==在进入函数时生效,在退出函数时失效。(生命期短);仅在本函数内可以访问,在别的函数内不能访问(局部可见)。临时使用,在退出所在的大括号后失效。

变量作用域

每一个变量都有一个有效范围,在这个范围内,改变量是可以访问的。
局部变量作用域:从定义之处起生效,至大括号结束后失效

  • 可以访问上一层级的变量
  • 可以和上一层级的变量重名(名字的覆盖)
  • 可以和全局变量重名
    生命周期(程序运算角度)和作用域(编写代码角度)是同一个问题。

函数名重载

C语言不允许函数名重名,C++允许函数名重名,称为函数名重载

double find_max(double a, double b);
double find_max(double a, double b, double c);
double find_max(int a, double b);

允许:两个函数名字相同,但参数列表不同(1.参数个数不同;2.参数类型不同)。

函数的匹配步骤:
1、先根据函数名查找,找到一个或多个重名函数
2、按“类型”+“个数”匹配(精确匹配)
3、模糊匹配 (可以的隐式类型转换),若多重模糊匹配,则报错了。

函数的递归调用

普通情况: main()->A()->B()->C()
递归调用: main()->A()->B()->A()
mian()->A()->A()…
主要用在算法设计里。用于实现特定的算法,例如斐波那契数列。n!等

int fx(int n)
{
	if(n==1)
		return 1; //中止条件
	else
		return n*fx(n-1);  //降低规模
}

递归特点:

  • 中止条件的判断:递归出口
  • 将n阶问题转化为n-1阶或更低阶

猜你喜欢

转载自blog.csdn.net/weixin_42040046/article/details/107645255