分享
 
 
 

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

王朝c/c++·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

第七章 函数

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

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

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

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

l 参数传递的几种方式:(1)C++中参数传递的缺省初始化方法是把实参的值拷贝到参数的存储区中,这被称为按值传递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 型的返回值即指向函数的指针。当一个函数名没有被调用操作符修饰时,会被解释成指向该类型函数的指针。指向函数的指针可以被用来调用它所指向的函数。调用函数时,不需要解引用操作符。无论是用函数名直接调用函数还是用指针间接调用函数,两者的写法是一样的。我们还可以定义函数指针数组。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有