c++Primer学习笔记(7)--函数

原创 2005年04月29日 17:34:00

第七章 函数

l         函数定义和声明:我们必须在调用函数之前就声明该函数,否则会引起编译错误;当然函数定义也可以被用作声明,但是函数在程序中只能被定义一次。典型情况下函数定义被放在单独的程序文本文件中或者与其他相关的函数定义放在同一个文本文件中,要想在其他文件而不是包含函数定义的文件中使用该函数,我们必须要用到另外一种函数声明机制,将包含该函数的文件#include进来。

l         函数声明由函数返回类型、函数名和参数表构成,这三个元素被称为函数声明function declaration 或函数原型function prototype。函数声明以及inline 函数的定义最好放在头文件中。

l         函数原型由函数返回类型函数名以及参数表构成。函数原型描述的是函数的接口,它详细描述了调用函数时需要提供的参数的类型和个数以及函数返回值的类型。在C++标准化之前,如果缺少显式返回类型的话返回值会被假定为int类型。在标准C++中,返回类型不能被省略。

l         函数的参数表不能省略,没有任何参数的函数可以用空参数表或含有单个关键字void 的参数表来表示。在C++中两个函数可能同名,但参数表不同这种函数被称为重载函数overloaded function 参数表称为函数的符号特征signature 冈为它被用来区分函数的不同实例。有了名字和符号特征就可以惟一地标识函数;也就是一个函数由函数名和参数唯一确定。

l         参数传递的几种方式:(1C++中参数传递的缺省初始化方法是把实参的值拷贝到参数的存储区中,这被称为按值传递pass-by-value。按值传递时函数不会访问当前调用的实参,函数处理的值是它本地的拷贝。(2引用传递,把参数声明成引用实际上改变了缺省的按值传递参数的传递机制。在按值传递时函数操纵的是实参的本地拷贝;当参数是引用时函数接收的是实参的左值而不是值的拷贝,这意味着函数知道实参在内存中的位置因而能够改变它的值或取它的地址。(3指针传递,与引用传递差不多,也是传递内存中的地址。它与引用的区别:引用必须被初始化为指向一个对象,一旦初始化了它就不能再指向其他对象;指针可以指向一系列不同的对象,也可以什么都不指向。如果一个参数可能在函数中指向不同的对象或者这个参数可能不指向任何对象,则必须使用指针参数。(4数组参数,C++中,数组永远不会按值传递,它是传递第一个元素准确地说是第0 个的指针。(5抽象容器类型参数,容器类型实际上是类类型,它比内置数组数据类型提供了更多的功能。(6缺省实参,函数可以用参数表中的初始化语法为一个或多个参数指定缺省实参。调用包含缺省实参的函数时,我们可以也可以不为该参数提供实参,如果提供了实参则它将覆盖缺省的实参值,否则函数将使用缺省实参值。(7省略号,有时候我们无法列出传递给函数的所有实参的类型和数目。在这种情况下我们可以用省略号... 指定函数参数表。省略号挂起类型检查机制它们的出现,告知编译器当函数被调用时可以有0 个或多个实参,而实参的类型未知。省略号有下列两种形式void foo( parm_list, ... );  void foo( ... );  第一种形式为特定数目的函数参数提供了声明,在这种情况下当函数被调用时对于与显式声明的参数相对应的实参进行类型检查,而对于与省略号对应的实参则挂起类型检查。在第一种形式中参数声明后面的逗号是可选的。

l         函数返回值return 语句被放在函数体内,这条语句结束当前正在执行的函数。在程序执行期间遇到return 语句时,程序控制权被返回给调用此函数的函数。return 语句有两种形式:return;  return expression;

l         递归函数,直接或者间接调用自己的函数称为递归函数。递归函数必须定义一个停止条件,否则会无限递归下去。

l         内联函数(inline,出现原因:调用函数比直接计算条件操作符要慢得多。若一个函数被指定为inline 函数,则它将在程序中每个调用点上被内联地展开。

l         链接指示符“extern C程序员用链接指示符(linkage directive)告诉编译器,该函数是用其他的程序设计语言编写的。链接指示符有两种形式,既可以是单一语句single statement 形式。也可以是复合语句compound statement 形式。

// 单一语句形式的链接指示符

extern "C" void exit(int);

// 复合语句形式的链接指示符

extern "C" {

int printf( const char* ... );

int scanf( const char* ... );

}

// 复合语句形式的链接指示符

extern "C" {

#include <cmath>

}链接指示符的第一种形式由关键字extern 后跟一个字符串常量以及一个普通的函数声明构成,虽然函数是用另外一种语言编写的,但调用它仍然需要类型检查。

l         Main()处理命令行选项Main()函数原形,int main( int argc, char *argv[] ) { ... }argc 包含命令行选项的个数,argv 包含aygc C 风格字符串,代表了由空格分隔的命令选项。argv[0]总是被设置为当前正被调用的命令。从索引1 argc-1 表示被传递给命令的实际选项。

l         指向函数的指针,int (*pf)( const string &, const string & ); 这个语句声明了pf 是一个指向函数的指针,该函数有两个参数和int 型的返回值即指向函数的指针。当一个函数名没有被调用操作符修饰时,会被解释成指向该类型函数的指针。指向函数的指针可以被用来调用它所指向的函数。调用函数时,不需要解引用操作符。无论是用函数名直接调用函数还是用指针间接调用函数,两者的写法是一样的。我们还可以定义函数指针数组。

 

 

 

C++Primer学习笔记(7)函数

1、函数调用做了两件事情,用对应的实参初始化函数的形参,并将控制权转交给被掉函数、主调函数的执行被挂起,被掉函数开始执行。 2、函数体是一个作用域。 3、函数不能返回另一个函数或者内置数组类型,但...
  • cjccjccjccjc
  • cjccjccjccjc
  • 2015年01月31日 18:44
  • 215

c++ Primer学习笔记

第一章 文件头及声明 关于extern 使用extern 声明而不定义,它是说明变量定义在程序其他地方   全局不初始化的extern int i; 是声明不定义;只要声明并且有初始化式,那么...
  • leiming32
  • leiming32
  • 2012年12月17日 23:57
  • 5217

C++ Primer 学习笔记(持续更新......)

本笔记主要是一个记录,整理和总结一下C++学习过程中的知识点。 struct和class 区别:两个关键字都是进行类的定义。struct也可以定义类,和class定义的类唯一不同之处就在于默认的初始访...
  • u012931582
  • u012931582
  • 2017年03月12日 22:05
  • 624

C++Primer学习笔记第七章(7/18)函数

函数调用:当函数调用发生时,程序用对应的实参初始化函数的形参,并将控制权转移给被调用函数。主调函数的执行被暂停,被调函数开始执行。 函数体是一个作用域:函数体是一个作用域。在函数体内定义的变量只在该函...
  • feliciafay
  • feliciafay
  • 2010年05月11日 01:33
  • 769

C++primer第五版第十一章学习笔记

练习11.1:描述map和vector的不同。 vector这种顺序容器,元素在其中按顺序存储,每个元素都有唯一对应的位置编号,所有操作都是按编号进行的。例如,获取元素,插入删除元素,遍历元素。底层的...
  • sunhero2010
  • sunhero2010
  • 2015年11月14日 09:32
  • 1308

C++primer学习笔记之函数

关于C++ primer plus第七章的总结性学习笔记
  • u010092734
  • u010092734
  • 2014年08月31日 16:19
  • 937

c++primer学习笔记5 - 函数

1 返回值 (1) 函数不能返回另一个函数或者内置数组类型,但可以返回指向函数的指针,或指向数组元素的指针的指针; (2) 不要返回局部对象的引用和指针; 2 参数传递 (1) const引用...
  • unclejimbo
  • unclejimbo
  • 2014年02月07日 15:37
  • 407

Linux学习笔记(六)——CentOS7初接触

前段时间学习hadoop全分布部署,由于一味求新,我居然安装了centos7,之后才发现变化太大了,耗费了不少时间,如下是用到的几个跟之前版本有变化的地方。 1. centos7设置ip地址 ...
  • thinkpadshi
  • thinkpadshi
  • 2015年06月26日 16:55
  • 1126

C++primer第五版第一章学习笔记

1. 函数的定义: return type, function name, parameter list, function body // int为返回类型,main为函数名,小括号包围的是可以为...
  • sunhero2010
  • sunhero2010
  • 2015年11月03日 15:30
  • 523

【读书笔记:C++ primer plus 第六版 中文版】第2章:开始学习C++

转载请注明出处: 本章内容包括: 创建C++程序. C++程序的一般格式. #include编译指令. main()函数. 使用cout对象进行输出 在C++程序中加入注释. 何时以及如何使用endl...
  • enyusmile
  • enyusmile
  • 2015年06月21日 10:33
  • 820
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++Primer学习笔记(7)--函数
举报原因:
原因补充:

(最多只允许输入30个字)