函数和作用

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章 函数和作用域
2.1函数定义和调用 2.2C++函数特性 2.3作用域和存储类型 2.4名称空间
2.1 函数定义和调用
2.1.1函数定义
C++的任何一个程序都可由一个主函数和若干个子函数组合而成。主 函数可以调用子函数,子函数还可以调用其他子函数。C++规定主函数名
必须是main,而其他函数可以是库函数或自定义函数。
程序结构而设定,本身没有任何操作。 (3) 函数类型决定了函数所需要的返回值类型,它可以是除数组类
型之外的任何有效的C++数据类型,包括引用、指针等。
2.1.1 函数定义
(4) 若函数类型为void时,则表示该函数没有返回值。但仍然可以在 函数体中使用return语句“return ;”,此时可将“return;”语 句理解为是函数体花括号“}”的作用,当流程遇到函数体的“}” 时,函数调用结束,控制权返回给主调函数。例如: void f1( int a)
2.1.2 函数的声明
声明一个函数按下列格式进行: <函数类型> <函数名>( <形参表> ); 可见,函数声明的格式是在函数头的后面加上分号 “;”。但要注意,函数声明的内容应和函数的定义应相
同。
例如,对于前面sum函数和最后一个printline函数可有 如下声明:
int sum(int x, int y);
void printline( char ch, int n );
2.1.3 值传递
函数的调用实质上就是参数传递, 在C++中,函数的参数传递有两种方式,一是按值传递, 二是地址传递或引用传递。 这里先来说明按值传递的参数传递方法,地址传递或引 用传递在以后来讨论。 当函数的形参定义成一般变量时,如前面printline和 sum函数的形参都是一般变量,此时函数的参数传递就是按 值传递方式,简称值传递,是指当一个函数被调用时,C++ 根据实参和形参的对应关系将实际参数的值一一传递给形参, 供函数执行时使用。
// A
2.1.2 函数的调用和声明
程序运行的结果如下:
代码中,main函数的for循环语句共调用了5次printline函数(A 句),每次调用时因实参i+1值不断改变,从而使函数printline打
印出来的星号个数也随之改变。
2.1.2 函数的调用和声明
3. 函数的声明 由于前面函数printline的定义代码是放在main函 数中调用语句A之前,因而A语句执行不会有问题。 但若将函数printline的定义代码放在调用语句A之 后,即函数定义在后,而调用在前,就会产生 “printline标识符未定义”的编译错误。 此时必须在调用前进行函数声明。
2.1.2 函数的调用Hale Waihona Puke Baidu声明
2. 函数的调用
函数调用的一般格式为:
<函数名>( <实参表> );
调用函数时要注意:实参与形参的个数应相等,
类型应一致,且按顺序对应,一一传递数据。
例如,下面的示例用来输出一个三角形的图案。
2.1.2 函数的调用和声明
[例Ex_Call] 函数的调用 #include <iostream> using namespace std; void printline( char ch, int n ) { 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); return 0; }
int sum(int x, int y) { int z = x + y; return z; 缩进 } 函数体 函数头 形参
对齐
图2.1 定义一个函数sum
2.1.1 函数定义
需要说明的是: (1) C/C++不允许在一个函数体中再定义函数,即禁止嵌套定义,但 允许嵌套调用。
(2) 函数体也可不含有任何语句,这样的函数称为空函数,它仅为
(1)主函数main不仅是程序的入口函数,而且与其他函数相比较还 有许多使用上的限制。例如,它不能被其他函数调用,不能用inline和 static来说明等。 (2)库函数,又称标准函数,是ANSI/ISO C++编译系统已经预先定 义好的函数,程序设计时可根据实际需要,直接使用这类函数,而不必 重新定义。调用时,必须在程序中包含相应的头文件,并指明使用名称
义的格式如下: <函数类型> <函数名>( <形式参数表> ) { 函 <若干语句> 数 } 体
2.1.1 函数定义
其中,函数名应是一个合法有效的C++标识符;函数头的形式参数 又简称为形参。 参数表中的每一个形参都是由形参的数据类型和形参名来构成, 根据上述定义格式,可以编写一个函数sum,如图2.1所示,注意它 们的书写规范。 函数类型 函数名
空间std。
2.1 函数定义和调用
(3)自定义函数是用户根据程序的需要,将某一个功能相 对独立的程序定义成的一个函数,或将解决某个问题的算法用一 个函数来组织。 与变量的使用规则相同,在C++程序中一定要先说明和定义 函数,然后才能调用函数。 C++中每一个函数的定义都是由4个
部分组成的,即函数名、函数类型、形式参数表和函数体,其定
{
if (a > 10) return; // return;一旦执行,后面的语句不再 被执行

} 当a>10条件满足时,“return;”语句将控制权返回给主调函数。
2.1.2 函数的调用和声明
1. 函数的实参和形参
定义一个函数就是为了以后的调用。调用函数时,先写函数名,然 后紧跟括号,括号里是实际调用该函数时所给定的参数,称为实际参数, 简称实参,并与形参相对应。要注意形参和实参的区别: (1) 从模块概念来说,形参是函数的接口,是存在于函数内部的变 量。而实参是存在于函数外部的变量。它们不是同一个实体,也就是说, 形参变量和实参变量所对应的内存空间不是同一个内存空间。 (2) 按函数定义时所指定的形参类型,实参除变量外还可以是数值 或表达式等,而形参只能是变量。 (3) 形参在函数调用之前是不存在的,只有在发生函数调用时,函 数中的形参才会被分配内存空间,然后执行函数体中的语句,而当调用 结束后,形参所占的内存空间又会被释放。
相关文档
最新文档