利用typedef定义函数指针类型

首先来看一段关于函数指针的代码:

#include<stdio.h>
int func(char *);
int main(int argc,char *argv[])
{
    int (*pFunc)(char *s);
    pFunc = func;
    pFunc("Hello");
    return 0;
}
int func(char *s)
{
    printf("%s\n",s);
    return 0;
}

  这段代码的第5行就是定义一个名字叫做pFunc的函数指针,它指向一个返回值为int,参数为char*的函数。然后我们把这两条语句比较一下:

  int (*pFunc)(char*s);

  int a;

  我个人在这里理解认为可以将第一条中的int(*)(char *)当作一个类似于int的变量声明来看待,然后把pFunc当作类似于a的一个标识符。

  有了这个理解我们再来看这两条语句:

  typedef int a;

  typedef int(*pFunc)(char *);

  第一条语句将a声明为变量int的一个别名,同样,那么也可以将第二条语句中的pFunc视作是int(*)(char *)的一个别名!

  Ok,接下来我们就可以来看一下这段代码了!

#include<stdio.h>
typedef int (*pFunc)(char *);
pFunc pfunc;
int func(char *);
int main(int argc,char *argv[])
{
    pfunc = func;
    pfunc("Hello");
    return 0;
}
int func(char *s)
{
    printf("%s\n",s);
    return 0;
}

  这段代码的第二行相当于是新定义了一种变量pFunc,它的功能是定义函数指针!它定义了一个函数指针pfunc,然后让这个指针指向函数func,最后再来通过pfunc来调用函数func!


看完上面那个,大家可以看一个更加变态的!


#include<stdio.h>
typedef int Func(char *);
Func *pfun; 
int func(char *s);
int main(int argc,char *argv[])
{
     pfun = func;
     pfun("Hello");
     return 0;
}
int func(char *s)
{
     printf("%s\n",s);
     return 0;
}

  这里我有一种更加极端的思想,那就是函数也是变量!第二行那个代码新定义了一种变量类型Func,这种变量类型定义出来的变量就是一个返回值为int,参数为char*的函数,那么Func*产生的就是指向这样一种变量的指针!也就是函数指针!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值