函数指针作为参数传递给函数
来源:互联网 发布:免费淘宝上货软件 编辑:程序博客网 时间:2024/05/12 03:10
函数指针同样是可以作为参数传递给函数的,
#include <iostream>
#include <string>
using namespace std;
int test(int);
int test2(int (*ra)(int),int);
void main(int argc,char* argv[])
{
cout<<test<<endl;
typedef int (*fp)(int);
fp fpi;
fpi=test;//fpi赋予test 函数的内存地址
cout<<test2(fpi,1)<<endl;//这里调用test2函数的时候,这里把fpi所存储的函数地址(test的函数地址)传递了给test2的第一个形参
cin.get();
}
int test(int a)
{
return a-1;
}
int test2(int (*ra)(int),int b)//这里定义了一个名字为ra的函数指针
{
int c=ra(10)+b;//在调用之后,ra已经指向fpi所指向的函数地址即test函数
return c;
}
利用函数指针,我们可以构成指针数组,更明确点的说法是构成指向函数的指针数组,这么说可能就容易理解的多了。
#include <iostream>
#include <string>
using namespace std;
void t1(){cout<<"test1";}
void t2(){cout<<"test2";}
void t3(){cout<<"test3";}
void main(int argc,char* argv[])
{
void* a[]={t1,t2,t3};
cout<<"比较t1()的内存地址和数组a[0]所存储的地址是否一致"<<t1<<"|"<<a[0]<<endl;
cout<<a[0]();//错误!指针数组是不能利用数组下标操作调用函数的
typedef void (*fp)();//自定义一个函数指针类型
fp b[]={t1,t2,t3}; //利用自定义类型fp把b[]定义趁一个指向函数的指针数组
b[0]();//现在利用指向函数的指针数组进行下标操作就可以进行函数的间接调用了;
cin.get();
}
仔细看上面的例子可能不用我多说大家也会知道是怎么一会事情了,最后我们做一个重点小结,只要记住这一点,对于理解利用函数指针构成数组进行函数间接调用就很容易了!
void* a[]={t1,t2,t3};
cout<<"比较t1()的内存地址和数组a[0]所存储的地址是否一致"<<t1<<"|"<<a[0]<<endl;
cout<<a[0]();//错误!指针数组是不能利用数组下标操作调用函数的
指针数组元素所保存的只是一个内存地址,既然只是个内存地址就不可能进行a[0]()这样地址带括号的操作,而函数指针不同它是一个例外,函数指针只所以这么叫它就是因为它是指向函数指向内存的代码区的指针,它被系统授予允许与()括号操作的权利,进行间接的函数调用,既然函数指针允许这么操作,那么被定义成函数指针的数组就一定是可以一样的操作的
- 函数指针作为参数传递给函数
- 指针作为函数参数传递
- 指针作为函数参数传递
- 指针作为函数参数传递
- 指针作为函数参数传递
- 指针作为函数参数传递
- 指针作为函数参数传递
- 指针作为函数参数传递
- 指针作为函数参数传递
- 函数指针作为参数传递
- 指针作为函数参数传递
- 成员函数指针作为参数传递给其他函数和普通函数指针的传递
- 关于函数作为参数传递给函数
- 类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的
- 类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的
- 指针作为函数参数传递 (转载)
- c++ 指针作为函数参数传递
- 指针作为函数参数传递 (转载)
- Spring v3.0.2 Learning Note 11 - XML-based Transaction Management
- 关于viewstate保护问题
- Spring v3.0.2 Learning Note 12 - Integrate with Hiberate
- 数据库连接池详解
- Spring v3.0.2 Learning Note 13 - AOP Example
- 函数指针作为参数传递给函数
- Perl语言入门(第五版)中涉及到的内置变量整理和它们第一次出现的页数
- Spring v3.0.2 Learning Note 14 - Send Email with Spring
- Silverlight输入数据验证系列四
- mysql中的中文成了问号
- Spring v3.0.2 Learning Note 15 - Use Velocity Email Template with Spring
- 从今天开始好好写日志
- 纯虚函数崩溃解决办法
- CAM350 简单使用