1.函数的传递
形参的初始化与变量的初始化一样,如果形参是非引用类型,则复制实参的值;如果形参为引用类型,则它只是实参的别名。
(1)非引用形参
普通的非引用类型的参数通过复制对应的实参实现初始化,当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的值。
注意:非引用形参表示对应实参的局部副本。对这类形参的修改仅仅改变了局部副本的值。一旦函数执行结束,这些局部变量的值也就没有了。
(2)非引用形参之指针形参
与其他非引用类型的形参一样,该类型的任何改变也仅仅作用于局部副本。如果函数将新指针值赋给形参,主调函数使用的实参指针的值没有改变。实参指针不改变,实参指针所指的对象可以改变值。若保护实参指针的值,加const修饰符。
(3)复制实参的局限性
复制实参并不是在所有的情况下都适合,不适合复制实参的情况包括:
当需要在函数中修改实参的值时。
当需要以大型对象作为实参传递时。对实际的应用而言,复制对象所付出的时间和存储空间代价往往过大。
当没办法实现对象的复制。
对于上述几种情况,有效的解决办法是将形参定义为引用或指针类型。
(4)引用形参
如交换两个实参的值。
(5)利用const引用避免复制
如果,使用引用的唯一目的是避免使用复制实参,则将形参定义为const引用。
(6)返回非引用类型
会复制对象
(7)返回引用
都不会复制对象
注意:千万不要返回局部对象的引用。千万不雅返回指向局部对象的指针。
(8)函数声明
正如变量必须先声明然后使用,函数也必须在调用之前先声明
(9)内联函数
内联函数应该放在头文件中
(10)指向函数的指针
函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回值以及形参确定。
bool (*pf)(const string&,const string&);
注意:用typedef简化函数指针的定义
该定义表示cmpFcn是一种指向函数的指针类型的名字。该指针类型为“指向返回bool类型并带有两个const string”引用形参的函数的指针。
(11)指向函数的指针的初始化和赋值
可以使用函数名对函数指针做初始化或赋值
此时直接引用函数名等效于在函数名上引用取地址操作符:
typedef bool (*cmpFcn)(const string&,const string&); bool length(const string&,const string&); int main() { cmpFcn fp = 0; fp = length; fp = &length; return 0; } bool length(const string& a,const string& b) { }
注意:函数指针只能通过同类型的函数或函数指针或0值常量值表达式进行初始化或赋值。
将函数值初始化0,表示该指针不指向任何函数。
(12)通过指针调用函数
cmpFcn fp = length; length("zhangsan","123"); fp("zhangsan","123"); //等价 (*fp)("zhangsan","123"); //等价
指向函数的指针可用于调用它所指向的函数。可以不需要使用解引用操作符,直接通过指针调用函数。
注意:如果指向函数的指针没有初始化,或者具有0值,则该指针不能在函数调用中使用,只有当指针已经初始化,或被赋值为指向某个函数,方能安全地用来调用函数。
(13)函数指针形参
函数的形参可以是指向函数的指针,这种形参有两种编写形式:
bool length2(const string& a,bool (const string&,const string&)); bool length2(const string& a,bool (*)(const string&,const string&));
(14)返回指向函数的指针
int (*ff(int))(int*,int);//返回值为函数指针 typedef int (*PF)(int*,int); PF ff(int);
相关推荐
###python调用C++与C函数的资料大全###
C++学习,函数部分C++学习,函数部分C++学习,函数部分C++学习,函数部分
主要介绍了c++函数指针使用示例,需要的朋友可以参考下
C++ 函数定义练习题 适合初学者
C编程的手册。C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C++ 可运行于多种平台上
数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值
最全C/C++函数手册、收集了几乎所有C、C++常用的函数,便于查询。附有C/C++基础知识 最全的API
c++函数库查找工具,供开发时用 C++ function library search tool for development use
C++函数库.docx
本功能软件是一款优秀的针对C++的查询软件,对C++、linux的开发非常有帮助,不可多得的!