函数指针的分析

第一点:函数指针分析

 

所谓函数指针,就是一种指向函数的指针。

其本质,还是一个指针。所以其定义方式类似于指针,但是仍旧有一些不一样。

当以方式如下:

void (*a)(int m,int n);

上述代码,意思是定义了一个函数指针,无返回值,即返回值为void,有两个形式参数,分别为int m,int n。

函数指针,只能指向与定义形式一致的函数。

例如有个函数如下:

void function1(int a1,int a2)
{
 int a3;
 a3 = a1 + a2;
 printf("a1'value is %d, a2's value is %d, the sum of a1 and a2 is a3,and the value of a3 is %d\n",a1,a2,a3);
}

那么,函数指针a,就可以赋值了,如下代码所示:

a = function1;

假如有一下函数定义:

void f3()
{
 printf("this is function f3\n");
}

那么,函数指针a就不可以赋值操作:a = f3;代码就是错误的。因为指针a的形式,与函数f3的形式不一致,即可以认为是数据类型不一致。

 

第二点:函数指针数组的定义

 

所谓函数指针数组,其本质,如字面意思,就是一个数组,但里边存储的确实指向函数的指针。

定义方式如下:

void (* f[3])(int a,int b);

其中,void 表示返回值的类型。f表示函数指针数组的变量名。3表示数组的大小。最后的(int a,int b),表示形式参数列表。其他类型的定义方法可以参照此格式。

示例如下:

void (* f[3])();

上述代码,定义了一个函数指针数组,大小为3,没有返回值,没有形式参数。

现定义函数原型:

void f1()
{
 printf("this is function f1\n");
}
void f2()
{
 printf("this is function f2\n");
}
void f3()
{
 printf("this is function f3\n");
}

下面,进行函数指针数组的赋值操作:

 f[0] = f1;
 f[1] = f2;
 f[2] = f3;

即用函数的函数名,给函数指针赋值。其实,函数的函数名,就是该函数的入口地址。

操作的时候,就可以像正常函数一样操作。如下提示:

while(1)
 {
  printf("input the num:");
  scanf("%d",&num);
  f[num]();  
 }

 

注意一点,就是,操作的时候,毕竟是个函数指针,所以,有时候,很容易把()这个括号忘掉,这样的话,调用的就不是函数了。另外,还要注意不要越界。否则,容易操作内存操作错误。造成程序终止。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值