🫒函数基础
2022-5-10
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 

 
一个典型的函数定义包括:返回类型函数名、由0个或多个形式参数(parameter,形参)组成的列表函数体。函数执行的操作在语句块中说明,称为函数体。
notion image
 

编写函数

的阶乘是从1到所有数字的乘积:
 

调用函数

程序通过调用运算符来执行函数。调用运算符的形式之一是一对圆括号(),作用于一个表达式,该表达式是函数或者指向函数的指针。圆括号内是一个用逗号隔开的实际参数(argument,实参) 列表,用来初始化函数形参。调用表达式的类型就是函数的返回类型。
函数调用完成两项工作:
  • 用实参初始化对应的形参
  • 将控制权从主调函数转移给被调函数。此时,主调函数的执行被暂时中断,被调函数开始执行。
 
return 语句结束函数的执行过程,完成两项工作:
  • 返回return语句中的值(如果有的话)
  • 将控制权从被调函数转移回主调函数,函数的返回值用于初始化调用表达式的结果,之后继续完成调用所在的表达式的剩余部分
 

形参和实参

实参是形参的初始值,两者的顺序和类型必须一一对应,相应的数量也要一致:
 
形参列表可以为空,但是不能省略。定义一个不带形参的函数,最常用的办法是写一个空的形参列表。为了与C语言兼容,也可以使用关键字void表示函数没有形参:
形参列表中的形参通常用逗号隔开,每个形参都是含有一个声明符的声明,即使两个形参类型一样,也必须把两个类型声明都写出来:
函数的任意两个形参不能同名,而且函数最外层作用域中的局部变量也不能使用与函数形参一样的名字。形参的名字是可选的,但是由于无法使用未命名的形参,所以形参一般都应该有个名字,即使某个形参不被函数使用,也必须为它提供一个实参。
 

函数返回类型

大多数类型都能用作函数的返回类型。一种特殊的返回类型是void,它表示函数不返回任何值。
函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针
 

局部对象

C++中,名字有作用域,对象有生命周期
  • 名字的作用域是程序文本的一部分, 名字在其中可见
  • 对象的生命周期是程序执行过程中该对象存在的一段时间
形参和函数体内定义的变量统称为局部变量,仅在函数的作用域内可见。局部变量会隐藏外部定义的变量。定义在任何函数外的变量在程序的整个执行过程中都存在,这种变量当程序启动时创建,直到程序中止时销毁。
 
只存在于块执行期间的对象称为自动对象,当块的执行结束后,块中创建的自动对象的值就变成未定义的了。当离开语句块时,其中定义的自动对象值是未定义的。参数是自动对象,当函数开始时将分配内存给参数,当函数结束时销毁。形参是一种自动对象,在函数开始时为形参申请存储空间,因为形参定义在函数体作用域之内,所以一旦函数终止,形参也就被销毁。
 
将局部变量定义为static将得到一个局部静态对象,局部静态对象在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序结束才被销毁,对象所在的函数结束执行并不会对它产生影响。在变量类型前添加关键字 static 可以定义局部静态对象。
如果局部静态对象没有显式的初始值,它将执行值初始化,内置类型的局部静态变量初始化为0 。
 

函数声明

和其他名字一样,函数的名字也必须在使用之前声明。和变量类似,函数只能定义一次,但可以声明多次,函数声明也叫做函数原型。函数的声明和函数的定义非常类似,唯一的区别是函数声明无须函数体,用一个分号替代即可。
函数应该在头文件中声明,在源文件中定义。定义函数的源文件应该包含含有函数声明的头文件,编译器负责验证函数的定义和声明是否匹配。
 
函数原型可以帮助编译器完成许多的工作,也可以帮助程序极大的降低程序出错的几率,原型可以确保以下几点:
  • 编译器正确处理函数返回值
  • 编译器检索使用的参数数目是否正确
  • 编译器检查使用的参数类型是否正确,如果不正确转换为正确的类型
 
 

分离式编译

分离式编译允许我们把程序按照逻辑关系分割到几个文件中去,每个文件独立编译。这一过程通常会产生后缀名是 .obj(Windows) 或 .o(UNIX) 的文件,该文件包含对象代码。之后编译器把对象文件链接在一起形成可执行文件。
如果修改了其中一个源文件,那么只需要单独编译此源文件,但如果修改了头文件,所有文件都要重新编译。例如,将函数的声明放在头文件中,函数的定义放在一个源文件中,另一个源文件用到这个函数时,只需要包含函数声明的头文件而不需要包含函数定义的源文件。
test.cppmain.cpp各自被编译成不同的.obj文件
  • C++
  • 控制语句函数参数
    目录