当前位置:文档之家› 函数和作用域

函数和作用域

根据上述定义格式,可以编写一个函数sum,如图2.1所示,注意它们的书写规范。
函数类型
对齐 缩进
int sum(int x, int y) {
int z = x + y; return z; }
函数名 函数头 形参
函数体
图2.1 定义一个函数sum
2.1.1 函数定义
需要说明的是:
Байду номын сангаас
(1) C/C++不允许在一个函数体中再定义函数,即禁止嵌套定义,但允许嵌套调用。
(2) 函数体也可不含有任何语句,这样的函数称为空函数,它仅为程序结构而设定,
本身没有任何操作。
(3) 函数类型决定了函数所需要的返回值类型,它可以是除数组类型之外的任何有效
的C++数据类型,包括引用、指针等。一旦指定了函数类型,则须在函数体中通过return
语句来指定函数的返回值,且返回值的类型应与函数类型相同,若返回值的类型与函数类
库函数,又称标准函数,是ANSI/ISO C++编译系统已经预先定义好的函数,程序设计 时可根据实际需要,直接使用这类函数,而不必重新定义。调用时,必须在程序中包含相 应的头文件,并指明使用名称空间std。
自定义函数是用户根据程序的需要,将某一个功能相对独立的程序定义成的一个函数, 或将解决某个问题的算法用一个函数来组织。与变量的使用规则相同,在C++程序中一定 要先说明和定义函数,然后才能调用函数。
实际上,在C++中,一个函数的调用方式还有很多。例如,对于前面sum函数还可有下列
调用方式:
int b = 2 * sum(4, 5);
// B
int c = 1;
c = sum(c, sum(c, 4));
// C
其中,B语句把函数作为表达式的一部分,并将返回值参与运算,结果b = 18;C是将
函数作为函数的实参,等价于“c = sum(1, sum(1,4));”,执行sum(1,4)后,等价于“c =
<函数名>( <实参表> )
调用函数时要注意:实参与形参的个数应相等,类型应一致,且按顺序对应,一一 传递数据。例如,下面的示例用来输出一个三角形的图案。
2.1.2 函数的调用和声明
[例Ex_Call] 函数的调用
#include <iostream>
using namespace std;
void printline( char ch, int n )
型不相同,则程序按类型自动转换方式转换成函数的类型或将return后面的表达式进行强
制转换。
(4) 若函数类型为void时,则表示该函数没有返回值。但仍然可以在函数体中使用
return语句“return ;”,此时可将“return;”语句理解为是函数体花括号“}”的作用,当流程
遇到函数体的“}”时,函数调用结束,控制权返回给主调函数。例如:
C++中每一个函数的定义都是由4个部分组成的,即函数名、函数类型、形式参数表和 函数体,其定义的格式如下:
<函数类型> <函数名>( <形式参数表> )
函{
数 体
}
<若干语句>
2.1.1 函数定义
其中,函数名应是一个合法有效的C++标识符;函数头的形式参数又简称为形参。参 数表中的每一个形参都是由形参的数据类型和形参名来构成,形数个数可以是0,表示没有 形式参数,但圆括号不能省略,也可以是1个或多个形参,但多个形参间要用逗号分隔。由 花括号构成的是函数的函数体部分,它可以有若干条语句,用于实现这个函数执行的功能。
void f1( int a)
{
if (a > 10) return;
// return;一旦执行,后面的语句不再被执行

}
当a>10条件满足时,“return;”语句将控制权返回给主调函数。
2.1.2 函数的调用和声明
1. 函数的实参和形参 定义一个函数就是为了以后的调用。调用函数时,先写函数名,然后紧跟括号,括 号里是实际调用该函数时所给定的参数,称为实际参数,简称实参,并与形参相对应。要 注意形参和实参的区别: (1) 从模块概念来说,形参是函数的接口,是存在于函数内部的变量。而实参是存在 于函数外部的变量。它们不是同一个实体,也就是说,形参变量和实参变量所对应的内存 空间不是同一个内存空间。 (2) 按函数定义时所指定的形参类型,实参除变量外还可以是数值或表达式等,而形 参只能是变量。 (3) 形参在函数调用之前是不存在的,只有在发生函数调用时,函数中的形参才会被 分配内存空间,然后执行函数体中的语句,而当调用结束后,形参所占的内存空间又会被 释放。 2. 函数的调用 函数调用的一般格式为:
{
for (int i = 0 ; i<n ; i++)
cout<<ch;
cout<<endl ;
}
int main()
{
int row = 5;
for (int i = 0; i<row; i++)
printline('*', i+1);
// A
return 0;
}
程序运行的结果如下:
2.1.2 函数的调用和声明
sum(1,5) ;”,最后结果为c = 6。
3. 函数的声明
由于前面函数printline的定义代码是放在main函数中调用语句A之前,因而A语句执行
不会有问题。但若将函数printline的定义代码放在调用语句A之后,即函数定义在后,而调
函数和作用域
2.1 函数定义和调用
➢2.1.1函数定义
C++的任何一个程序都可由一个主函数和若干个子函数组合而成。主函数可以调用子 函数,子函数还可以调用其他子函数。C++规定主函数名必须是main,而其他函数可以是 库函数或自定义函数。
主函数main不仅是程序的入口函数,而且与其他函数相比较还有许多使用上的限制。 例如,它不能被其他函数调用,不能用inline和static来说明等。ANSI/ISO C++还规定主函 数main的函数类型必须是int,以保证程序的移植性。
代码中,main函数的for循环语句共调用了5次printline函数(A句),每次调用时因实参
i+1值不断改变,从而使函数printline打印出来的星号个数也随之改变。
printline函数由于没有返回值,因此它作为一个语句来调用。事实上,对于有返回值
的函数也可进行这种方式的调用,只是此时不使用返回值,仅要求函数完成一定的操作。
相关主题