如何通过函数指针调用函数
函数存放在内存的代码区域内,它们同样有地址.如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。
1、函数指针的定义方式:data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);
例如: int (*fp)(int a); //这里就定义了一个指向函数(这个函数参数仅仅为一个int类型,函数返回值是int类型)的指针fp。
例子:
int test(int a)
{
return a;
}
int main(int argc, const char * argv[])
{
int (*fp)(int a);
fp = test;
cout<<fp(2)<<endl;
return 0;
}
注意,函数指针所指向的函数一定要保持函数的返回值类型,函数参数个数,类型一致。
#include
//定义类型fun_ptr,它是一个函数指针,指向的函数返回值为int,参数为int
typedef int (*fun_ptr)(int);
//fun1
int fun1(int a)
{
printf("call fun1,pram=%d,return %d+1
", a, a);
return a+1;
}
//fun2
int fun2(int a)
{
printf("call fun2,pram=%d,return %d+2
", a, a);
return a+2;
}
int main(int argc, char *argv[])
{
int a = 10;
int s = 0;
//定义函数指针类型的变量p_fun
fun_ptr p_fun;
//指向fun1
p_fun = fun1;
//执行
s=p_fun(a);
printf("s=%d
", s);
//指向fun2
p_fun = fun2;
//执行
s=p_fun(a);
printf("s=%d
", s);
return 0;
}
执行结果:
typedef int (*function_pointer_t) ( int arg1, int arg2 );
然后,定义函数指针变量
function_pointer_t fp_invoker = 0;
函数指针可以动态改变内容,改变调用对象,假设有两个函数
int function_sum( int arg1, int arg2 )
{
return arg1+arg2;
}
int function_sub( int arg1, int arg2 )
{
return arg1-arg2;
}
注意到两个函数的原型与函数指针类型是一致的。以下是调用
fp_invoker = function_sum; // 直接用函数名赋值即可
fp_invoker(1,2); // 调用时,可以认为函数指针便是函数名,此时调用加法
fp_invoker = function_sub; // 同理,切换到减法
fp_invoker(1,2); // 调用减法
以上都是直观的用法,通常函数指针用于回调,即下层函数先将函数指针内容保存起来,处理结束后,再调用。此时要注意首先检查函数指针内容是否为空。
if( fp_invoker ){
fp_invoker( arg1, arg2 );
}
当一个函数的返回值为指针类型时如何调用
调用方式:type * var; \/\/定义一个与返回值类型相同的指针变量 var = function(); \/\/执行函数,并将返回值赋值给变量var cout<<*var; \/\/输出指针所指向的值,C语言输出用printf()函数 或:cout<
函数指针怎么调用
1、首先打开vs2014,新建一个项目。2、添加头文件。3、添加main主函数。4、定义一个函数addTwoNumbers。5、将addTwoNumbers函数地址赋值给ptr_sum。6、调用函数指针求和。7、运行程序,看看结果。注意事项:因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变...
带有参数的函数,如果通过函数指针调用。
返回值类型 ( * 指针变量名) ([形参列表]);注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例子:include<s...
求指针函数的使用!!
函数指针是通过函数名及有关参数进行调用的。与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;如果pf是指向某浮点型变量f的指针,则*pf就等价于它所指的变量f。同样地,*f是指向函数func(x)的指针,则*f就代表它所指向的函数func。所以在执行了f=func;之后,...
C语言函数指针调用
void point(char *p){ p+=3; } \/\/加上void比较好 char b[4]={'a','b','c','d'}, *p=b; \/\/写在同一行,p是char*的 point(p);\/\/ 这里传递的是指针,在函数里面改指针是“临时变量”,不是局部变量 \/\/临时对象不会被记录,如果改p指向的内存就可以被记录。printf("%c\\n", ...
C语言能通过函数的地址调用函数吗?
即可调用。include <stdio.h>typedef void(*pfun)(int x); \/\/ 指针函数:指向void返回,带参数int参数的函数void output(int x){ printf("x: %d\\n", x);}int main(){ pfun p = output; \/\/ 将output函数指针赋予p p(10); \/\/ 通过函数指针调用函数 return 0;} ...
C语言中函数指针用法
从上述程序可以看出用,函数指针变量形式调用函数的步骤如下:1>. 先定义函数指针变量,如后一程序中第 9 行 int (*pmax)(); 定义 pmax 为函数指针变量。2>. 把被调函数的入口地址 ( 函数名 ) 赋予该函数指针变量,如程序中第 11 行 pmax=max;3>. 用函数指针变量形式调用函数,如...
带指针的函数怎么调用?
\/\/p1指向b,p2指向a。但并未对a,b内存空间操作,当函数调用结束后,指针p1,p2 \/\/也释放了,所以并未起任何作用 int* temp;temp=p1; p1=p2; p2=temp;} int main(){ int a=2,b=3;swa(&a,&b); \/\/传递地址 cout<<a<<" "<...
c++直接调用函数与通过函数指针调用有什么不一样
函数指针也可以指向类的成员函数的,调用是需要通过类实例来调用:typedef int (CTranSession::*BillProc )(char*,char*);int CTranSession::GetAllBillDetailCDMA( char *sphone,char *scalltime ){ int ret = 0; BillProc p[8]; p[0] = CDMA_GetMonth; p[1] = CDMA_Get...
回调函数:一个通过函数指针调用的函数
详情请查看视频回答
播娣朗铭: 如果存在函数指针p,以*p取函数指针的值,然后加上参数列表调用即可. 即 ret = (*p)(arg_list); 如,p为int (*)(int)类型的函数指针,那么 int a = (*p)(10); 这样就是一次典型的函数指针调用.
察哈尔右翼后旗13481435450: 用普通指针怎样调用函数 - ?
播娣朗铭: 调用函数 需要使用 函数指针啊,函数指针是指向函数的指针变量. 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数.函数指针的声明方法为:函数类型 (标志符指针变量名) (形参列表); 注1:“函数类型”说明函数...
察哈尔右翼后旗13481435450: 通过函数指针调用函数 c++ - ?
播娣朗铭: 这个例子,有一个误导.其实例1中,参数不是普通指针,是二级指针,其实是相当于:**name 这样就可以修改*name的值,这是二级指针的典型应用.如果第二个例子中这样调用:swap(&point_1,&point_2); 并且函数这样写:void swap(int **p1,int **p2){int *temp;temp=*p1;*p1=*p2;*p2=temp;}这就和例子1的效果一样了.误导在于:int *name[]其实是一个二级指针
察哈尔右翼后旗13481435450: 请问函数指针和指针函数的运用? - ?
播娣朗铭: 函数指针是一种指向函数的指针,本质上是一种指针;如:int (*p)(int a);int get(int a){return a;}p=get;p(1); 指针函数是返回值为指针的函数,本质上是一种函数;如:int* get(int* a){return a;}
察哈尔右翼后旗13481435450: 如何用指针调用对象函数 - ?
播娣朗铭: 在释放指针p后是要将指针p赋一个空值,避免成为一个野指针
察哈尔右翼后旗13481435450: 函数调用(函数指针) - ?
播娣朗铭: 一般需要定义一个函数指针类型 typedef int (*function_pointer_t) ( int arg1, int arg2 );然后,定义函数指针变量 function_pointer_t fp_invoker = 0;函数指针可以动态改变内容,改变调用对象,假设有两个函数 int function_sum( int arg1, int arg2 )...
察哈尔右翼后旗13481435450: 怎样用函数指针 指向一个静态函数 - ?
播娣朗铭: C++指向函数的指针定义方式为:返回类型 (*指针名)(函数参数列表),例如 void (*p)(int)是指向一个返回值为void 参数为int类型的函数.而若想定义一个指向类成员函数的函数指针该怎么定义呢?对成员函数指针的使用.(1)非静态成员...
察哈尔右翼后旗13481435450: 带有参数的函数,如果通过函数指针调用. - ?
播娣朗铭: 函数指针的声明方法为:返回值类型 ( * 指针变量名) ([形参列表]); 注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级.若省略整体则成为一个函数说明,说明了一个返回的数据类...
察哈尔右翼后旗13481435450: C语言 函数指针 的调用问题?函数指针 怎么用?最好有例子.. - ?
播娣朗铭: 有函数: int fun(int a,int b); 要定义指向该函数的指针 对比指向 int a; 的指针 int *p; p = &a; p的定义是怎么来的?首先要保证p是一个指针类型 写下(*p),然后,考虑下p的基类型,p的基类型就是变量a的类型int 将int 放在(*p)前面就行了 ...