文档章节

C++学习 【4.2】 利用函数实现指定的功能---函数的调用

西镜os
 西镜os
发布于 2016/01/26 16:08
字数 1282
阅读 41
收藏 0

学习《C++程序设计》(第二版)  谭浩强  主编   第四章 关于函数的调用

4.4   函数的调用

4.5   函数的嵌套调用

4.6   函数的递归调用

4.4 函数的调用

  • 函数调用的一般形式

        调用函数的一般形式为:

        函数名(【实参表列】)

        如果实参表列包括多个实参,对实参求值的顺序并不是确定的

        很多C++系统(例如vc++和GCC)是按从右至左的顺序求解的。

  • 函数调用的方式

        按函数在语句中的作用来分,可以有3种函数调用方式:

    1. 函数语句:把函数单独作为一个语句,并不要求函数返回一个值,指示要求函数完成一定的操作。

    2. 函数表达式:函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。

    3. 函数参数:函数调用作为一个函数的实参。

  • 对被调用函数的声明和函数原型

        函数声明:就是在函数尚未定义的情况下, 事先将该函数的有关信息通知编译系统,以便编译能正常运行。

        函数定义:对函数功能的确立,包括制定函数名,函数类型,形参及其类型,函数体等,它是一个完整的独立的函数单位。

        其实,在函数声明中也可以不写参数名,而只写形参的类型

        

        使用函数原型是C和C++的一个重要特点。

        它的作用主要是:根据函数原型在程序编译阶段对调用函数的合法性进行全面的检查

        

        函数原型的一般形式为;

    1. 函数类型   函数名(参数类型1,参数类型2)

    2. 函数类型   函数名(参数类型1,参数名1,参数类型2,参数名2)

        第一种形式是最基本的形式,为了方便阅读,也允许在函数原型上加上参数名,但编译系统并不检查参数名,因此参数名是什么都无所谓。


        有经验的程序编制人员一般都把main函数写在最前面,这样对整个程序的结构和作用一目了然,统揽全局,然后再具体了解各函数的细节。

        此外,用函数原型来声明函数,还能减少编写程序时可能出现的错误。因为函数声明的位置一般和函数调用的位置比较近。


        函数声明的位置可以在调用函数所在的函数中,也可以在函数外。

        如果函数声明在函数的外部,在所有函数定义之前,(这就是对函数的外部声明),则在各个主调函数中不必对所调用的函数再做声明,作用域将是整个文件。


4.5   函数的嵌套调用

        C++不允许对函数作嵌套定义,也就是说在一个函数中不能完整地包含另一个函数。

        在一个程序中每一个函数的定义多事互相平行和独立的。

        C++虽不能嵌套定义函数,但是可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。


4.6   函数的递归调用

        在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用(recursive)调用。

        C++ 允许函数的递归调用。

        程序中不应该出现这种无休止的递归调用,而只应该出现有限次数的、有终止的递归调用,这可以用if语句来控制,只有在某一条件成立时才继续执行递归调用,否则就不再继续。

        包含递归调用的函数称为递归函数。


        一个递归的问题可以分为回溯和递推两个阶段。

        如果要求递归过程不是无限制进行下去,必须具有一个结束递归过程的条件。


        递推法的特点是从一个已知的事实出发,按一定规律推出下一个事实,再从这个新的已知的事实出发,再向下推出一个新的事实,这和递归是不同的。


        许多问题既可以用递归方法来处理,也可以用非递归方法来处理。

        在实现递归时,在空间和时间上开销比较大,但符合人们的思路,程序容易理解

        人们可以不去考虑实现递归的过程细节,只须写出递归公式和递归结束条件(边界条件),则可很容易写出递归函数。



© 著作权归作者所有

共有 人打赏支持
西镜os
粉丝 2
博文 41
码字总数 47413
作品 0
杭州
程序员
私信 提问
关于Nebula3工程的几个编译选项

研究一下人家是怎么通过编译选项来优化性能的 DEBUG: C++/Code Generation/Enable String Pooling: Yes (/GF) 该选项使编译器能够为执行过程中程序映像和内存中的相同字符串创建单个副本,从...

长平狐
2012/11/12
79
0
c语言基础学习11_项目实战:IDE(集成开发环境)

============================================================================= ============================================================================= 涉及到的知识点有: 一......

黑泽明军
01/29
0
0
不可小看的技术——C语言编程中的“宏”

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
03/25
0
0
深入浅出MFC学习笔记(第6章 :MFC程序的生死因果)

第六章 :MFC程序的生死因果 本章主要是从MFC程序代码中,找出一个windows程序原本该有的程序入口点、窗口类注册、窗口产生、消息循环、窗口函数等操作。抽丝剥茧彻底理解一个MFC程序的诞生与...

长平狐
2012/10/08
121
0
泛型编程与设计新思维

作者: 徐景周 转帖: http://www.vckbase.com/document/viewdoc/?id=955 前言 永远记住,编写代码的宗旨在于简单明了,不要使用语言中的冷僻特性,耍小聪明,重要的是编写你理解的代码,理解...

ValueError
2011/01/12
339
1

没有更多内容

加载失败,请刷新页面

加载更多

Angularjs实现控制器之间通信方式示例

利用angularjs开发项目中,控制器之间的通信,比如参数的传递,数据的传递,都是比较常见的。控制器之间的通信,显得尤为重要。常见的方式有如下两种:一、angular服务的方式;二、基于事件广...

前端攻城老湿
7分钟前
0
0
xshell使用xftp传输文件

12月11日任务 15.4 xshell使用xftp传输文件 15.5 使用pure-ftpd搭建ftp服务 1.xshell使用xftp传输文件 示例一:xshell使用sftp传输文件 新建一个会话 定义为sftp 连接登入 可以get文件,下载...

hhpuppy
9分钟前
0
0
深入解析Vuex实战总结

这篇文章主要介绍了Vuex的初探与实战小结,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 1.背景 最近在做一个单页面的管理后台项...

前端攻城小牛
10分钟前
1
0
eslint rules 规则

'rules': { "comma-dangle": ["error", "never"], //是否允许对象中出现结尾逗号 "no-cond-assign": 2, //条件语句的条件中不允许出现赋值运算符 "no-console": 2, //不允许出现console语句 ...

agenyun
54分钟前
2
0
类型判断时instanceof和equals的不同用法

接口设计时为了避免序列化的麻烦,将接口定义为参数为map<String,String>类型的接口,但是现在调用时需要转换当前的实体Bean为Map,接口接收方再把Map转换为另一个Bean实体。过程中的需要对类...

wangtx
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部