函数指针怎么调用

 我来答
百度网友faadf46
高粉答主

2019-12-17 · 说的都是干货,快来关注
知道答主
回答量:4556
采纳率:0%
帮助的人:75.6万
展开全部

1、首先打开vs2014,新建一个项目。

2、添加头文件。

3、添加main主函数。

4、定义一个函数addTwoNumbers。

5、将addTwoNumbers函数地址赋值给ptr_sum。

6、调用函数指针求和。

7、运行程序,看看结果。

注意事项:

 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

犬虫门心西安
2014-04-03 · TA获得超过163个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:110万
展开全部
函数指针的使用过程包含三个步骤:
1、定义一个函数指针;
2、将函数指针指向一个函数;
3、调用这个函数指针所指向的函数。
下面给一个例子加以说明:
int add(int one, int another)
{
return one + another;
}

int sub(int one, int another)
{
return one - another;
}

int rev(int n)
{
return -n;
}
// 先定义3个函数,分别完成加法、减法和求相反数。这样只是为了说明问题的方便。
void main(void)
{
int result;
int (*p)(); // 这样定义指向函数的指针
// 应说明如下问题:
// 1、这里的()绝对不能少;
// 2、前面的int类型应该和这个指针未来要指向的函数的返回值类型保证一致。
p = add;
// 这个操作是最需要说明的。
//1、add是函数名称;
//2、函数名称本质上是一个函数的入口地址常量,或者换句话说,函数名称是指向函数的指针常量(函数名称实质上是这个函数的代码和数据在内存中的首地址);
//3、将函数名称赋值给一个函数指针,就实现了将一个函数指针指向这个函数的作用。实际上,这时的指针变量里存储的就是那个函数的第一条指令的地址。
result = p(3, 4); // 也可以写成:result = (*p)(3, 4);
// 这里依然有几个问题需要说明:
// 有初学者对这里很不理解,认为p是指针名称,不是函数名称,怎么能调用add()函数呢?实际上,问题是这样的:
// “XXXX(...)”这种形式的内容被C语言编译系统这样理解:
// 要调用一个函数,而且这个函数的首地址由XXXX确定;对应的汇编指令主要是:CALL XXXX
// 由于p的值就是函数首地址(函数第一条指令的地址),因此,p()就是在调用地址值为p的值的函数。
p = sub; // 让p指向sub()函数
result = p(6, 2); // 调用sub()函数
p = rev; // 让p指向rev()函数
result = p(5); // 调用rev()函数
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
馄饨978
推荐于2017-09-30 · TA获得超过538个赞
知道小有建树答主
回答量:315
采纳率:0%
帮助的人:262万
展开全部

一般需要定义一个函数指针类型

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 );
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
悠游旅书
推荐于2017-09-17 · 情感答疑舒缓心情迷茫寻路
悠游旅书
采纳数:4152 获赞数:14322

向TA提问 私信TA
展开全部
  函数指针是通过函数名及有关参数进行调用的。
  与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;如果pf是指向某浮点型变量f的指针,则*pf就等价于它所指的变量f。同样地,*f是指向函数func(x)的指针,则*f就代表它所指向的函数func。所以在执行了f=func;之后,(*f)和func代表同一函数。
  由于函数指针指向存储区中的某个函数,因此可以通过函数指针调用相应的函数。现在我们就讨论如何用函数指针调用函数,它应执行下面三步:
  首先,要说明函数指针变量。例如:int (*f)(int x);
  其次,要对函数指针变量赋值。例如: f=func; (func(x)必须先要有定义);
  最后,要用 (*指针变量)(参数表),调用函数。例如: (*f)(x);(x必须先赋值)。
  【例】任意输入n个数,找出其中最大数,并且输出最大数值。

main()

{

int f();

int i,a,b;

int (*p)(); /* 定义函数指针 */

scanf("%d",&a);

p=f; /* 给函数指针p赋值,使它指向函数f */

for(i=1;i<9;i++)

{
scanf("%d",&b);

a=(*p)(a,b); /* 通过指针p调用函数f */

}

printf("The Max Number is:%d",a)

}

f(int x,int y)

{

int z;

z=(x>y)?x:y;

return(z);

}

运行结果为:

343 -45 4389 4235 1 -534 988 555 789↙

The Max Number is:4389

【指针函数】

一个函数不仅可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。返回指针的函数,一般定义格式为:
类型标识符 *函数名(参数表)

int *f(x,y);

其中x,y是形式参数,f是函数名,调用后返回一个指向整型数据的地址指针。f(x,y)是函数,其值是指针。

如:char *ch();表示的就是一个返回字符型指针的函数,请看下面的例题:

【例】将字符串1(str1)复制到字符串2(str2),并输出字符串2.

#include "stdio.h"

main()

{

char *ch(char *,char *);

char str1[]="I am glad to meet you!";

char str2[]="Welcom to study C!";

printf("%s",ch(str1,str2));

}

char *ch(char *str1,char *str2)

{

int i;

char *p;

p=str2

if(*str2==NULL) exit(-1);

do

{

*str2=*str1;

str1++;

str2++;

}while(*str1!=NULL);

return(p);

}

通过分析可得:

函数指针是一个指向函数的指针,而指针函数只是说明他是一个返回值为指针的函数,

函数指针可以用来指向一个函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式