c++——函数

函数

函数:程序的功能模块。

1. 函数定义与调用

1.1 函数定义

类型  函数名(形参表){
	语句序列
}

1.1.1 形式参数

(type1 name1,type2 name2,...,typen namen) 

其中type为参数类型,name为参数名。形参的的作用是实现主调函数与被调函数之间的联系。函数在没有被调用时时静止的,此时的形参只是一个符号,它限制了对应形参数据的类型。在函数被被调用时,形参才被主调函数的实参赋值。

1.1.2 函数的返回值和返回类型

函数的返回值由return语句给出(格式为:return 表达式; ),返回值类型有函数定义确定。函数也可以没有返回值,此时类型用void,返回值既可以没有返回语句,也可以return ;

1.2 函数调用

1.2.1 函数的调用形式

在函数调用前,必须要有函数原型声明(函数定义也属于函数的声明),而函数的定义(实现),可以在调用代码前,也可以在调用代码之后。函数声明形式如下:

类型 函数名(形参表);

在声明了函数原型之后,便可以按如下形式调用函数:

函数名(实参表);
1.2.2 函数的嵌套调用和递归调用

嵌套调用:函数内部语句有函数调用。
递归调用:函数直接或间接的调用了自身。递归调用的过程一般分为递推和回归两步。

1.3 函数的参数传递

在函数未被调用时,函数的形参并不占有实际的内存空,也没有实际的值。只有在函数被调用时才给形参分配存储单元,并将实参和形参结合。结合方式有值传递和引用传递。
值传递:是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参。这一过程使参数的单向传递过程,也就是说在函数内部无论形参发生了什么改变,都不会形象函数外的实参的值。
引用传递:引用是变量的别名(在声明一个引用时,必须同时初始化,使它指向一个已存在的对象,且初始化后,不能改变其指向。在函数声明的形参,初始化在函数传参时。也就是说引用的初始化,是在第一次执行该语句时,因为函数外的声明语句会被立马执行,而函数的声明不会立马执行。)引用传递因为是直接操作实参对象,所以函数内的改变会影响函数外的值。

补充:为了编写能处理不同数量的实参函数,C++标准直蹦提供了两种主要的方法。如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型;如果是实参类型不同,可以编写可变参数模板的类。

1.4 内联函数

内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。内联函数的定义形式如下:

inline 类型 函数名(形参表){
	语句序列
}

注意: inline只是一个建议,编译器会自主判定是否作为内联函数(编译时拷贝代码)。

1.5 constexpr函数

顾名思义constexpr(const expression)常量表达式。constexpr修饰的函数在其所有的参数都是常量表达式时,一定返回常量表达式,且函数体有且仅有一条return语句。
例如:

constexpr int len(const int arg){
	return 4 * arg;
}

1.6 带默认参数的函数

函数在定义时可以预先声明默认的形参值。如果在调用时,若没有传入相应实参,形参采用默认值。c++中规定,函数形参中的默认参数必须放在形参表的最后。
例如:

int add(int x=0,int y=0){
	return x + y ;
}

1.7 函数重载

c++允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。方便使用,便于记忆。两个以上的函数,具有相同的函数名,但形参的个数或者类型不同,编译器更具实参和形参的类型及个数的最佳匹配,自动确定使用哪一个函数。 重载函数的形参必须不同。
例如:

int add(int x,int y);
float add(float x,float y}; //形参类型不同
int  add(int x, int y, int z); //形参个数不同
float  add(int x, int y, float z); //形参类型和个数不同
// 

1.8 C++标准库

参考地址:http://www.cppreference.com


联系邮箱: antarm@outlook.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ufy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值