typedef int (* func)(int ,int )

先看一下例子:

#include "iostream"

using namespace std;

int add(int a,int b){
return (a+b);
}

typedef int (* func)(int ,int ) ;

void main(){
func f = add;
int n = f(1,2);
cout << n << endl;
}

其中 typedef int (* func)(int ,int ) 比较难理解,因为我们知道typedef 是宏定义,一般的语法是这样:

typedef unsigned long ulong;

这个定义是用ulong作unsigned long 的别名

在这里的意思是定义一种指针类型lpAddFun,它是一种指向函数int (int,int)的指针,也就是说lpAddFun表示的是这种类型的函数的地址,因为:

函数名不是其类型的一部分函数的类型只由它的返回值和参数表决定.指向add()的指针必须指向与add()相同类型的函数带有相同的返回类型和相同的参数表   。

int (* func)(int ,int )和int* func(int ,int )是不同的,后者说明的是返回一个int类型的指针,所以括号是必须加的

例题:

#include<stdio.h>
int inc(int a)
{
return(++a);
}


int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}


typedef int(FUNC1)(int);
typedef int(FUNC2) (int*,int*,int*);

void show(FUNC2 fun,int arg1, int *arg2)
{
//fun 为指向函数int multi(int*a,int*b,int*c)的指针
//arg1 = 10,arg2 =&a;

 FUNC1 *p = &inc;         //p为指向函数inc的指针
int temp =p(arg1);                //等价于 temp = inc(arg1) = inc(10) = 11
fun(&temp,&arg1, arg2);  

//运行fun()函数后,*arg2 = temp * arg1 = 11 * 10 = 110

printf("%d\n",*arg2);
}

int main()
{
int a;
show(multi,10,&a);
return 0;
}

结果:110

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值