C++语言基础|函数定义与调用

1. 函数的定义

函数是一个命名的程序代码块,是程序完成其操作的场所,是将功能重复的程序段抽象出来所形成一个独立的、可重复使用的功能模块。 1
定义函数的一般格式为:

说明:

  • 函数必须先定义才可以使用
  • 定义函数就是编写完成函数功能的程序块。

在函数的定义中:

  • 返回类型为函数返回值的类型,可以是系统任一基本数据类型或用户已定义的一种数据类型,它是函数执行过程中通过return语句要求的返回值的类型,又称为该函数的类型。当一个函数不需要通过return语句返回一个值时,称为无返回值函数或无类型函数,此时需要使用void作为类型名。
  • 函数名是用户为函数所起的名字,它是一个标识符,应符合C++标识符的一般命名规则,用户通过使用这个函数名和实参表可以调用该函数。
  • 形式参数表可以包含任意多项(可以没有),当多于一项时,前后两个参数之间必须用逗号分开。
  • 用花括号括起来的语句序列组成了函数体,即函数所完成的具体操作,函数体一般分为3部分:第1部分为定义部分,定义函数所需要的局部常量与局部变量;第2部分为函数的功能部分,完成函数的功能;第3部分为返回值部分,返回函数的结果。如果函数体中没有任何语句,该函数称作空函数。
  • 每个函数都是一个功能独立的模块,绝不允许在一个函数体内定义另一个函数。
/*********************************
*   p2_13.cpp                	*
* 函数的使用, 对两个数取大   	*
*********************************/
	#include <iostream>
	using namespace std;
	int max(int x,int y)
	{
        int z;
	    z=(x>y)?x:y;
	    return z;
	}
	int main()
	{
	  int a,b;
	  cin>>a>>b;
	  cout<<max(a,b)<<endl;
	  return 0;
	}

2. 函数原型的声明

在C++程序中,使用函数前首先需要对函数原型进行声明,告诉编译器函数的名称、类型和形式参数。
在C++中,函数原型声明原则如下:
(1) 如果函数定义在先,调用在后,调用前可以不必声明;如果函数定义在后,调用在先,调用前必须声明。
(2) 在程序设计中,为了使程序设计的逻辑结构清晰,一般将主要的函数放在程序的起始位置声明,这样也起到了列函数目录的作用。

声明函数原型的形式如下:
返回类型 函数名(数据类型1参数1,数据类型2参数2,…);
例如:

 int max(int x,int y) ;
 int max(int,int) 

3. 函数的调用

3.1 函数的调用形式

函数调用的一般形式为:

在这里插入图片描述

各实际参数表中的实际参数应与形参表中的形参一一对应,即个数相等且对应参数的数据类型相同。
函数调用是一个表达式,函数名连同括号是函数调用运算符。表达式的值就是被调函数的返回值,它的类型就是函数定义中指定的函数返回值的类型,即函数的类型。
如果函数的返回值为void,说明该函数没有返回值。
例如:

 cout<<max(a,b)<<endl;

注意: 主函数main()不需要进行原型语声明,也不允许任何函数调用它,它只由操作系统调用并返回操作系统。

3.2 函数的调用的执行过程

当调用一个函数时,整个调用过程分为三步进行:

  • 第一步:函数调用;
  1. 将函数调用语句下一条语句的地址保存在一种称为“栈”的内存空间中,以便函数调用完后返回。将数据放到栈空间中的过程称为压栈。
  2. 对实参表从后向前,依次计算出实参表达式的值,并将值压栈。
  3. 转跳到函数体处。
  • 第二步:函数体执行,即逐条运行函数体中语句的过程。
  1. 如果函数中还定义了变量,将变量压栈。
  2. 将每一个形参以栈中对应的实参值取代,执行函数体。
  3. 将函数体中的变量、保存在栈中的实参值,依次从栈中取出,以释放栈空间。从栈中取出数据称为出栈,x出栈用pop(x)表示。
  • 第三步:返回,即返回到函数调用表达式的位置。
  1. 返回过程执行的是函数体中的return语句。

以函数max()为例,演示函数调用的详细过程如图所示:
在这里插入图片描述

3.3 函数参数的按值传递

函数调用过程实际上执行了一个从参数传递----执行函数体----返回的过程。其中的函数参数传递过程的实质是将实参值通过栈空间一一传送给实参的过程,这种把实参表达式的值传送给对应的形参变量传递方式称为“按值传递”。
在这里插入图片描述

/**************************************
* 函数的传值调用, 将两个数交换  *
**************************************/
#include<iostream>
using namespace std;
void swap(int a,int b)//函数定义
{
    int t;
    t=a, a=b, b=t;
}
int main()
{
    int x=7,y=11;
    cout<<"x="<<x<<"  y="<<y<<endl;
    swap(x,y);//传值调用
    cout<<"after swap:";
    cout<<"x="<<x<<"  y="<<y<<endl;
    return 0;
} 


  1. 本教程仅供教学使用,参考教材 :《C++语言程序设计教程》,杨进才、沈显君编著,清华大学出版社,2022年1月第4版 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

皖山文武

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

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

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

打赏作者

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

抵扣说明:

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

余额充值