函数指针应用

一,函数指针基础

#include <stdio.h>

int max(int x,int y)
{
 int z;
 if(x>y) z=x;
 else z=y;
 return z;
}
void main()
{
  int a,b,c;
  int(*p)(int ,int);//定义函数指针;注意*p两边的圆括号不能省略!参数类型可以省略(也就是说可以写成 int(*p)();)
  p=max;//将函数的入口地址赋值给函数指针(函数的入口地址就是函数的名称)
  scanf("%d,%d",&a,&b);
  c=(*p)(a,b);
  printf("%d,%d,max is%d\n",a,b,c);

}

二.利用typedef来定义函数指针

#include <stdio.h>
int max(int x,int y)
{
 int z;
 if(x>y) z=x;
 else z=y;
 return z;
}

void main()
{
 typedef int(*PTR)(int,int);//   typedef的功能是定义新的类型,定义了一种PTR的类型
  int a,b,c;
  PTR ptr;
  ptr=max;
  scanf("%d,%d",&a,&b);
  c=(*ptr)(a,b);
  printf("%d,%d,max is%d\n",a,b,c);
}

三,是在第二种方法的基础上演变而来

#include <stdio.h>
int max(int x,int y)
{
 int z;
 if(x>y) z=x;
 else z=y;
 return z;
}

void main()
{
 typedef int(PTR)(int,int);
  int a,b,c;
  PTR* ptr;
 
  ptr=max;
  scanf("%d,%d",&a,&b);
  c=(*ptr)(a,b);
  printf("%d,%d,max is%d\n",a,b,c);
}

四.函数指针数组

 例如:

   int (*fun[2])()={fun1,fun2};

其实这个还是比较好理解的;每个元素存储的是函数的首地址;

如果调用第一个方法的话:fun[0](参数值...);

说到这里,最近学习COM组件的时候就遇到了函数指针数组的问题,在一个结构体中,成员是函数指针:

typedef struct {
SetStringPtr * SetString;
GetStringPtr * GetString;
} IExampleVtbl;

其中SetStringPtr 与GetStringPtr 是通过typedef定义的新类型:

typedef long SetStringPtr(char *);

typedef long GetStringPtr(char *, long);

初始化: IExampleVtbl IExample_Vtbl = {SetString, GetString};//SetString与GetString是已经定义的函数的名称

函数指针的应用在COM基础这块体现比较充分(专业术语有个叫虚表)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值