电脑函数简介
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序从main( )开始,一个函数可以调用其他函数,也可 以被其他函数调用。 函数与函数之间通过传递参数和返回值相联系。 C++不允许函数嵌套定义。在一个函数中再定义一个函数 是非法的。
例3: 例 2 : 例 1 : area_s( ) void 定义的一般形式: { area_s(int void int area_s(int a a ,int ,int b) b) 类型标识符 函数名(形式参数表) {{ int a=9,b=8; { int c=a*b; int area=a*b; 函数体 return(a*b); cout<<c<<endl; } }cout<<area<<endl;
对于用户自己定义的函数,只要函数调用点在自定义函数 之前,程序员必须在源代码中说明函数原型。函数原型可不包 含形参数变量名,只包含形参数类型名。 如:
int area_s(int ,int);
也可包含形参数变量名:
int area_s(int a,int b);
注 意 函数原型和函数定义中 的 函数返回类型、函 数 名和形 参数表必须完全 一致,否则, 编译器会报告有编译错误。
§5.1 函数概述
函数(Function)是按给定的任务,把相关语句组织在一起 的程序块,也称为例程或过程。
函数分为标准库函数和用户自定义函数。 标准库函数:可以在任何程序中使用的公共函数,由C++ 编译器提供。 用户自定义函数:必须按C++要求通过函数定义、函数说 明、才能被调用,由用户自定义。
5.2 函数参数
• 一、指针作为参数 • 二、引用作为参数
一、指针作为参数
1、传址调用
传值—— 单向传递 传址—— 双向传递 传地址调用的方法: 即 实参 传数值
形参不能改变实参
形参
传地址
即 实参 形参
形参能改变实参
(1)、传递实参的地址;
(2)、形参必须定义为指针变量; (3)、函数调用时,实参地址→形参指针。形参指向的目标 变量即为实参数,形参的改变将影响实参的改变。
本章讨论的主要问题
要编好程序,就要合理地划分程序中的各个程 序块,C++中称这种程序块为函数。
本章介绍函数的定义及调用方法,以及一般 变量、数组、指针、引用作为函数参数传递的不 同。
第5章函 数
• • • • • • • • • §5.1 函数概述 §5.2 函数参数 §5.3 栈机制 §5.4 指针函数与函数指针 §5.5 命令行参数 §5.6 递归函数 §5.7 重载函数 §5.8带缺省参数的函数 §5.9内联函数(第6章内容)
•实例:swap
四、传值参数
• 所谓传值,是指在函数被调用之时,用克隆(复制) 实参的办法来创建行参。 • 克隆(复制)实参就是用实参创建形参而实参本身没 有任何变化。
• 实例:swap • 传值参数不能解决的问题:
– 要传递相同类型的数据非常多(比如要对1000个数 据排序) – 从函数内部获取多个数据 – 要改变函数外部的变量值
(3)函数调用的几种情况 函数语句
printstar(
函数表达式
);
C=2*area_s(l,w);
函数参数
m=max(a,max(b,c));
三、函数原型(函数声明)
函数原型(Function Prototyping)是一条程序语句,必须以分号 结束。它由函数返回类型、函数名和参数表构成,其形式与函数 定义的头部相似。 格式: 返回类型 函数名(参数表);
例如:下面程序通过传址调用实现两个整型数的交换
#include <iostream> using namespace std; void swap(int *,int *); void main() { int a=3,b=8; cout<<“a=“<<a<<“,b=“<<b<<endl; swap(&a,&b); //传址调用 cout<<“After swapping…\n”; cout<<“a=“<<a<<“,b=“<<b<<endl; } 结果: void swap(int *x,int *y) a=3,b=8 { After swapping… int temp=*x; *x=*y; a=8,b=3 *y=temp; }
一、函数定义
}
其中:
函数名—给自定义的函数取的名字。 形式参数表—函数被调用时,接收调用函数传递的实参数。
函数体—执行功能的语句块。
函数返回值—通过函数调用获得的函数返回值,其值由 return 语句返回。
#include<iostream> using namespace std; 二、函数调用 void swap(int x,int y); ( 1)函数调用的形式: int main(){ int a=16, b=48; 函数名 (实参数表); cout<<"a= "<<a<<", b= "<<b<<endl; ( 2)调用实质: swap(a,b); cout<<"After Being Swapped; \n"; 程序执行流程转向由函数名指定的被调用函数。 cout<<"a= "<<a<<", b= "<<b<<endl; 实参数一一对应地传递给函数定义中的形参数。 } 执行函数定义中的函数体。输出结果: a=16 , b=48 void swap(int x, int y){ return语句将值返回到调用处。 After Being Swapped; 执行结束,通过 a=16, b=48 int temp=x; x=y;程序执行流程返回调用处。执行后面的语句。 y=temp; }
传址调用的内存分配情况如下图所示:
栈 区
swap(int *x,int *y)
temp
3
0067:F090
y
x 0067:F090 b
0067:F092 ……
8 *y
main ( )
0067:F092
a
3
……
*x
swap(&a,&b)
图 7.4
如将上例改为传值调用,ຫໍສະໝຸດ Baidu两个整型变量的值不能交换。
#include <iostream> using namespace std; void swap(int,int); void main() { int a=3,b=8; cout<<“a=“<<a<<“,b=“<<b<<endl; swap(a,b); //传值调用 cout<<“After swapping…\n”; cout<<“a=“<<a<<“,b=“<<b<<endl; } 结果: void swap(int x,int y) a=3,b=8 { After swapping… int temp=x; a=3,b=8 x=y; y=temp; }
例3: 例 2 : 例 1 : area_s( ) void 定义的一般形式: { area_s(int void int area_s(int a a ,int ,int b) b) 类型标识符 函数名(形式参数表) {{ int a=9,b=8; { int c=a*b; int area=a*b; 函数体 return(a*b); cout<<c<<endl; } }cout<<area<<endl;
对于用户自己定义的函数,只要函数调用点在自定义函数 之前,程序员必须在源代码中说明函数原型。函数原型可不包 含形参数变量名,只包含形参数类型名。 如:
int area_s(int ,int);
也可包含形参数变量名:
int area_s(int a,int b);
注 意 函数原型和函数定义中 的 函数返回类型、函 数 名和形 参数表必须完全 一致,否则, 编译器会报告有编译错误。
§5.1 函数概述
函数(Function)是按给定的任务,把相关语句组织在一起 的程序块,也称为例程或过程。
函数分为标准库函数和用户自定义函数。 标准库函数:可以在任何程序中使用的公共函数,由C++ 编译器提供。 用户自定义函数:必须按C++要求通过函数定义、函数说 明、才能被调用,由用户自定义。
5.2 函数参数
• 一、指针作为参数 • 二、引用作为参数
一、指针作为参数
1、传址调用
传值—— 单向传递 传址—— 双向传递 传地址调用的方法: 即 实参 传数值
形参不能改变实参
形参
传地址
即 实参 形参
形参能改变实参
(1)、传递实参的地址;
(2)、形参必须定义为指针变量; (3)、函数调用时,实参地址→形参指针。形参指向的目标 变量即为实参数,形参的改变将影响实参的改变。
本章讨论的主要问题
要编好程序,就要合理地划分程序中的各个程 序块,C++中称这种程序块为函数。
本章介绍函数的定义及调用方法,以及一般 变量、数组、指针、引用作为函数参数传递的不 同。
第5章函 数
• • • • • • • • • §5.1 函数概述 §5.2 函数参数 §5.3 栈机制 §5.4 指针函数与函数指针 §5.5 命令行参数 §5.6 递归函数 §5.7 重载函数 §5.8带缺省参数的函数 §5.9内联函数(第6章内容)
•实例:swap
四、传值参数
• 所谓传值,是指在函数被调用之时,用克隆(复制) 实参的办法来创建行参。 • 克隆(复制)实参就是用实参创建形参而实参本身没 有任何变化。
• 实例:swap • 传值参数不能解决的问题:
– 要传递相同类型的数据非常多(比如要对1000个数 据排序) – 从函数内部获取多个数据 – 要改变函数外部的变量值
(3)函数调用的几种情况 函数语句
printstar(
函数表达式
);
C=2*area_s(l,w);
函数参数
m=max(a,max(b,c));
三、函数原型(函数声明)
函数原型(Function Prototyping)是一条程序语句,必须以分号 结束。它由函数返回类型、函数名和参数表构成,其形式与函数 定义的头部相似。 格式: 返回类型 函数名(参数表);
例如:下面程序通过传址调用实现两个整型数的交换
#include <iostream> using namespace std; void swap(int *,int *); void main() { int a=3,b=8; cout<<“a=“<<a<<“,b=“<<b<<endl; swap(&a,&b); //传址调用 cout<<“After swapping…\n”; cout<<“a=“<<a<<“,b=“<<b<<endl; } 结果: void swap(int *x,int *y) a=3,b=8 { After swapping… int temp=*x; *x=*y; a=8,b=3 *y=temp; }
一、函数定义
}
其中:
函数名—给自定义的函数取的名字。 形式参数表—函数被调用时,接收调用函数传递的实参数。
函数体—执行功能的语句块。
函数返回值—通过函数调用获得的函数返回值,其值由 return 语句返回。
#include<iostream> using namespace std; 二、函数调用 void swap(int x,int y); ( 1)函数调用的形式: int main(){ int a=16, b=48; 函数名 (实参数表); cout<<"a= "<<a<<", b= "<<b<<endl; ( 2)调用实质: swap(a,b); cout<<"After Being Swapped; \n"; 程序执行流程转向由函数名指定的被调用函数。 cout<<"a= "<<a<<", b= "<<b<<endl; 实参数一一对应地传递给函数定义中的形参数。 } 执行函数定义中的函数体。输出结果: a=16 , b=48 void swap(int x, int y){ return语句将值返回到调用处。 After Being Swapped; 执行结束,通过 a=16, b=48 int temp=x; x=y;程序执行流程返回调用处。执行后面的语句。 y=temp; }
传址调用的内存分配情况如下图所示:
栈 区
swap(int *x,int *y)
temp
3
0067:F090
y
x 0067:F090 b
0067:F092 ……
8 *y
main ( )
0067:F092
a
3
……
*x
swap(&a,&b)
图 7.4
如将上例改为传值调用,ຫໍສະໝຸດ Baidu两个整型变量的值不能交换。
#include <iostream> using namespace std; void swap(int,int); void main() { int a=3,b=8; cout<<“a=“<<a<<“,b=“<<b<<endl; swap(a,b); //传值调用 cout<<“After swapping…\n”; cout<<“a=“<<a<<“,b=“<<b<<endl; } 结果: void swap(int x,int y) a=3,b=8 { After swapping… int temp=x; a=3,b=8 x=y; y=temp; }