6.1 函数基础

一个典型函数包括:返回类型,函数名字,0或多个形参组成的列表以及函数体

调用运算符  ()

编写函数

调用函数

函数调用完成两项任务:

一是用实参初始化函数对应的形参,二是将控制权转移给被调用函数

此时,主调函数的执行被中断,被调函数开始执行

return也完成两项:一是返回return语句中的值,二是将控制权从被调函数转移回主调函数

形参和实参

实参是形参的初始值,形参一定会被初始化(不能将const char*转换成int)

 

函数的形参列表

隐式地定义空形参列表  void f1() { }

显示地定义空形参列表  void f1(void) {  }

函数返回类型

一种特殊返回类型是 void 表示不返回任何值

函数的返回类型不能是数组类型或者函数类型,

但可以是指向数组或函数的指针(p205,p211)

6.1.1 局部对象

C++中,名字有作用域,对象有生命周期

  • 名字的作用域是程序文本的一部分,名字在其中可见
  • 对象的申明周期是程序执行过程中该对象存在的一段时间

形参和函数体内定义的变量全称为 局部变量

仅在函数的作用域内可见,同时局部变量会隐藏在外层作用域中同名的其他所有声明中。

自动对象

把只存在于块执行期间的对象称为自动对象(automatic object)

块的执行结束后,块中创建的自动对象的值就变成未定义的了

形参是一种自动对象,函数开始时为形参申请储存空间,因为形参定义在函数体作用域之内,函数一终止,形参就被销毁。

内置类型的未初始化的局部变量将产生未定义的值

局部静态对象

有些时候需要令局部变量的生命周期贯穿函数调用及之后的时间

可以定义成 static

局部静态对象(local static object在程序的执行路径第一次经过对象定义语句时初始化,知道程序结束时销毁

size_t count_calls()

{

    static size_t ctr = 0;

    return ++ctr;

}

int main()

{

    for (size_t i = 0; i != 10; ++i)

        count_calls();

    cout << count_calls();

    return 0;

}

11

只会定义一次?而且不能直接访问ctr

 

6.1.2 函数声明

函数只能定义一次但是可以声明多次

声明不包含函数体,所以无需形参的名字但最好写

在头文件中进行函数声明

和变量类似,建议在头文件中声明,在源文件中定义

能保证函数所有的声明一致。而且一旦向改变函数的接口,只需改变一条声明即可

含有函数声明的头文件应该被包含到定义函数的源文件中

 

6.1.3 分离式编译

略 p187

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值