C++怎么定义一个指向函数的指针?
#include<iostream.h>double&function(double&variable){returnvariable;}voidmain(){doubl...
#include<iostream.h>
double&function(double &variable)
{
return variable;
}
void main()
{
double a=10;
double *p=&a;
double *q=&function();//定义指针q指向函数functions
cout<<function(a)<<endl;
function(a)=5;
cout<<a<<'\t'<<function(a)<<endl;
cout<<p<<'\t'<<q<<endl;
}
这样为什么不可以,应该怎么办呢? 展开
double&function(double &variable)
{
return variable;
}
void main()
{
double a=10;
double *p=&a;
double *q=&function();//定义指针q指向函数functions
cout<<function(a)<<endl;
function(a)=5;
cout<<a<<'\t'<<function(a)<<endl;
cout<<p<<'\t'<<q<<endl;
}
这样为什么不可以,应该怎么办呢? 展开
2015-07-02 · 知道合伙人互联网行家
关注
展开全部
C++指向函数的指针定义方式为:
返回类型 (*指针名)(函数参数列表),例如 void (*p)(int)是指向一个返回值为void 参数为int类型的函数。
而若想定义一个指向类成员函数的函数指针该怎么定义呢?对成员函数指针的使用。
(1)非静态成员函数
定义方式:返回类型 (类名::*指针名)(函数参数列表)例如void (A::*p)(int)是一个指向A类中成员函数的函数指针。
赋值方式:p=&A::函数名,而一般的函数指针的赋值是p=函数名即可,注意区别。(成员函数必须是public类型的)
调用方式:成员函数指针的调用必须通过类对象进行调用,a.*p(int)即可调用成员函数(该成员函数是public类型的)
(2)静态成员函数
对于静态成员函数的定义和使用方法都与普通函数指针的相同,只是在赋值的时候和非静态成员们函数指针的赋值方法相同。
因为静态成员函数的指针类型是与普通函数指针类型相同的。
返回类型 (*指针名)(函数参数列表),例如 void (*p)(int)是指向一个返回值为void 参数为int类型的函数。
而若想定义一个指向类成员函数的函数指针该怎么定义呢?对成员函数指针的使用。
(1)非静态成员函数
定义方式:返回类型 (类名::*指针名)(函数参数列表)例如void (A::*p)(int)是一个指向A类中成员函数的函数指针。
赋值方式:p=&A::函数名,而一般的函数指针的赋值是p=函数名即可,注意区别。(成员函数必须是public类型的)
调用方式:成员函数指针的调用必须通过类对象进行调用,a.*p(int)即可调用成员函数(该成员函数是public类型的)
(2)静态成员函数
对于静态成员函数的定义和使用方法都与普通函数指针的相同,只是在赋值的时候和非静态成员们函数指针的赋值方法相同。
因为静态成员函数的指针类型是与普通函数指针类型相同的。
展开全部
void Test1() {}
typedef void (*funcType1)(); //普通函数指针类型定义
//调用
funcType1 f1 = &Test1; //或f1 = Test1;
f1(); //普通函数调用
typedef void (*funcType1)(); //普通函数指针类型定义
//调用
funcType1 f1 = &Test1; //或f1 = Test1;
f1(); //普通函数调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
具体例子
int main()
{void (*p)(int n);//声明函数指针的时候,参数的个数和类型必须和被指向的函数相同
void fun(int a);
p=fun;//指针p指向fun,fun是地址,正确
(*p)(0);//通过指针调用函数,与p();等价其中0是作为函数的参数
return 0;}
void fun(int a)
{}
因为函数的调用是需要一定的开销的,当一个函数经常被调用的时候,如果函数只有几行,这样我们可以通过inline函数来解决函数调用开销的问题。
但是如果函数有很多行且经常调用,那么,我们可以通过函数指针来解决函数调用开销的问题
int main()
{void (*p)(int n);//声明函数指针的时候,参数的个数和类型必须和被指向的函数相同
void fun(int a);
p=fun;//指针p指向fun,fun是地址,正确
(*p)(0);//通过指针调用函数,与p();等价其中0是作为函数的参数
return 0;}
void fun(int a)
{}
因为函数的调用是需要一定的开销的,当一个函数经常被调用的时候,如果函数只有几行,这样我们可以通过inline函数来解决函数调用开销的问题。
但是如果函数有很多行且经常调用,那么,我们可以通过函数指针来解决函数调用开销的问题
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询