指向函数的指针_示例

C语言中, 函数名本身就代表着该函数的入口地址。通过这个入口地址可以找到该 函数,该入口地址称为函数的指针。我们可以定义一个指针变量,使它的值等于函数的入口地址, 那么通过这个指针变量也可以调用此函数,这个指针变量称为指向函数的指针,简称为函数指针。
定义形式如下:
数据类型 (*函数指针名) (形参);
指针函数与指向函数的指针是两个完全不同的概念,前者是函数,后者是指针,但是,指针函数的原型与函数指针的定义在格式却很相似,仅差一对圆括号。
例如:
int (*fun) (int x, int y);
fun是一个指向函数的指针变量,所指函数返回值的类型为int类型,所指函数有两个整型参数。*fun两侧的圆括号不能省略,fun先与“*”结合,表明fun是指针变量;(*fun)后面的(int x, int y),表明指针fun指向函数,所指函数有两个整型参数。(*fun)前面的int,表明fun所指函数的返回值的类型为int类型。
int *fun(int x, int y);
fun是一个指针函数,该函数返回值的类型为“int *”类型,该函数有两个整型参数。fun先与其后的(int x, int y)结合,表明fun是一个函数,该函数有两个整型参数;fun前面的“int *”,表明函数fun的返回值是int类型的指针。

注意:
1.定义函数指针之后,必须首先将一函数名(代表该函数的入口地址)赋给函数指针,然后才能通过函数指针间接调用这个函数。
函数指针变量名  = 函数名;
在C语言中,函数名本身就是指向该函数的指针,因此可以用来函数指针进行赋值。函数名虽然是指针,但它是指针常量而不是指针变量,因而不能改变它的值。
2.在利用函数指针来间接调用其所指向的函数时,该函数的定义必须存在,否则将出现错误。
3.一个函数指针既可以指向用户自定义的函数,也可以指向C语言的标准函数。

int add(int x, int y)
{
return x+y;
}

# include <stdio.h>
int main(void)
{
int x, y;
int total1, total2, total3;
int (*p)(int x, int y);
printf("Input x & y;");
scanf("%d%d", &x, &y);
p = add; //p指向函数add;
total1 = add(x, y);
total2 = (*p)(x, y); // *p必须带()否则会出错;
total3 = p(x, y); //p指向函数add;
printf("1. %d + %d = %d\n", x, y, total1);
printf("2. %d + %d = %d\n", x, y, total2);
printf("3. %d + %d = %d\n", x, y, total3);

return 0;
}

/*程序运行结果:

----------------------

Input x & y;11 11
1. 11 + 11 = 22
2. 11 + 11 = 22
3. 11 + 11 = 22

----------------------

*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值