笔记4 函数

一·定义
函数是程序代码的一个自包含单元,用于完成某一特
定的任务。
有的函数完成某一操作;
有的函数计算出一个值。
通常,一个函数即能完成某一特定操作,又能计算数值。
为什么要定义函数
避免重复的编程。
使程序更加模块化,便于阅读、修改。
一个程序必须有且只有一个main( )函数,C++从main( )
函数开始执行。
C++语言中,所有函数都是平行独立的,无主次、相
互包含之分。函数可以嵌套调用,不可嵌套定义。
在这里插入图片描述
二·分类
从用户使用的角度看,函数有两种:
(1) 系统函数,即库函数。这是由编译系统提供的,用户
不必自己定义这些函数,可以直接使用它们。
(2) 用户自己定义的函数。用以解决用户的专门需要。
用户在设计程序时,可以将完成某一相对独立功能的程序定义为一
个函数。用户在程序中,根据应用的需要,由用户自己定义函数,
这类函数称为用户自定义的函数
库函数是C++编译系统已预定义的函数,用户根据需要可以
直接使用这类函数。库函数也称为标准函数。
•C++把一些常用函数作为库函数提供给用户,用户可以直
接使用系统提供的库函数:
•数学计算函数(如sqrt()、pow(),fabs(),exp()等, cmath)
•字符串处理函数(string)
•标准输入输出函数等(iostream),
•用户使用任一库函数时,直接使用,不用定义,但在程序
中必须包含相应的头文件。
如 #include等。
从用户使用的角度看,函数有两种:
(1) 系统函数,即库函数。
(2) 用户自己定义的函数。
从函数的形式看,函数分两类:
(1) 无参函数。调用函数时不必给出参数。
(2) 有参函数。在调用函数时,要给出参数。在主调函数
和被调用函数之间有数据传递
三·定义函数的一般形式
1.无参函数

类型标识符 函数名()
{声明部分
语句
}
void printstar() //定义printstar函数
{
cout<<"************ "<<endl; 
}

2.有参函数

类型标识符 函数名(形式参数表列)
{声明部分
语句
}
int max(int x,int y) 
{int z; 
z=x>y?x:y; 
return (z); 
}

四·函数参数和函数的值、
1.形参和实参
在定义函数时 形式参数和实际参数 函数名后面括号中的变量名称为
形式参数(formal parameter,简称形参)。
形参是被调函数中的变量;
在主调函数中调用一个函数时,函数名后面括
号中的参数(可以是一个表达式)称为实际参数
(actual parameter,简称实参)。
实参是主调函数赋给被调函数的特定值。
实参可以是常量、变量或复杂的表达式,不管是哪
种情况,在调用时实参必须是一个确定的值。
注:
1、在函数调用前,形参并不占内存的存储单元,只有在函
数开始调用时,形参才被分配内存单元。调用结束后,形
参所占用的内存单元被释放。
2、实参可以是常量、变量或表达式,但要求有确定的值。
3、实参变量对形参变量的数据传递是"值传递",即单向传
递,只由实参传给形参,而不能由形参传回来给实参。在
内存中实参、形参分占不同的单元。
实参与形参一一对应,类型应相同或赋值兼容。
4、不同的函数中可以使用相同的变量名和形参名,他们是
不同的变量。

2.函数的返回值

函数的返回值通过return语句获得。函数只能有唯一的
返回值。
函数返回值的类型就是函数的类型。
return语句可以是一个表达式,函数先计算表达式后再返
回值。
return语句还可以终止函数,并将控制返回到主调函数。
return 语句之后的代码是不能执行的代码。
一个函数中可以有一个以上的return语句,执行到哪一
个return语句,哪一个语句起作用。
五·函数的调用
1.一般形式 函数名([实参表列])
2.方式

按函数在语句中的作用来分,可以有以下3种函数调用方式:
1. 函数语句
把函数调用单独作为一个语句,并不要求函数带回一个值,
只是要求函数完成一定的操作。printstar();
2. 函数表达式
函数出现在一个表达式中,这时要求函数带回一个确定的
值以参加表达式的运算。如c=2*max(a,b);
3. 函数参数
函数调用作为一个函数的实参。如
m=max(a,max(b,c));

3.条件
在一个函数中调用另一个函数需要具备条件:
(1) 首先被调用的函数必须是已经存在的函数。
(2) 如果使用库函数,应用#include命令将有关头文件
"包含"到本文件中来。
(3) 如果使用用户自定义的函数,函数调用遵循先定义、
后调用的原则,即
被调函数应出现在主调函数之前;
如果被调用函数出现在主调函数之后,则函数必须在主调函数
之前进行声明。

在这里插入图片描述
在这里插入图片描述
六·变量
1.局部变量
在一个函数内部定义的变量,它只在本函数范围内
有效,也就是说只有在本函数内才能使用它们,在
此函数以外是不能使用这些变量的。
2.全局变量
程序的编译单位是源程序文件,一个源文件可以包含一
个或若干个函数。
在函数内定义的变量是局部变量
在函数之外定义的变量是外部变量,称为全局变
量(global variable,也称全程变量)。
全局变量的有效范围为从定义变量的位置
开始到本源文件结束。
说明:
(1) 设全局变量的作用是增加函数间数据联系的渠道。
(2) 建议不在必要时不要使用全局变量,因为:
① 全局变量在程序的全部执行过程中都占用存储单元,而
不是仅在需要时才开辟单元。
② 它使函数的通用性降低了
③ 使用全局变量过多,会降低程序的清晰性。
(3) 如果在同一个源文件中,全局变量与局部变量同名
,则在局部变量的作用范围内,全局变量被屏蔽,
即它不起作用
3.变量的作用域
变量的有效范围称为变量的作用域(scope)。
文件作用域(file scope)
函数作用域(function scope)
块作用域(block scope)
函数原型作用域(function prototype scope)。
4.存储类别
存储类别是从生存时间的角度来分析的,指的是数据
在内存中存储的方法,分为动态存储变量和静态存储变
量。具体包含4种:
自动的(auto)
静态的(static)
寄存器的(register)
外部的(extern)
在这里插入图片描述
七·预处理命令
可以在C++源程序中加入一些"预处理命
令"(preprocessor directives),以改进
程序设计环境,提高编程效
C++提供的预处理功能主要有以下3种:
(1) 宏定义 (#define 标识符 字符串)
(2) 文件包含(file1.cpp中有以下#include命令:
#include “file2.cpp”)
(3) 条件编译
为了与一般C++语句相区别,这些命令以
符号"#"开头,而且末尾不包含分号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值