0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析typedef函数指针用法

单片机爱好者 2018-11-02 10:38 次阅读

1.简单的函数指针的应用

形式1:返回类型(*函数名)(参数表)

char (*pFun)(int);

char glFun(int a){ return;}

void main()

{

pFun= glFun;

(*pFun)(2);

}

第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。

第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址

然后就是main()函数了,它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFun。main()函数的第二句中“*pFun”显然是取pFun所指向地址的内容,当然也就是取出了函数glFun()的内容,然后给定参数为2。

2.使用typedef更直观更方便

形式1:typedef 返回类型(*新类型)(参数表)

typedef char (*PTRFUN)(int);

PTRFUN pFun;

char glFun(int a){ return;}

void main()

{

pFun= glFun;

(*pFun)(2);

}

typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。

第二行的代码便使用这个新类型定义了变量pFun,此时就可以像使用形式1一样使用这个变量了。

3.例子说明

#include

#include

typedef int (*FP_CALC)(int,int);//定义一个函数指针类型

int add(int a, int b)

{

return a + b;

}

int sub(int a, int b)

{

return a - b;

}

int mul(int a, int b)

{

return a * b;

}

int div(int a, int b)

{

return b ? a/b : -1;

}

//定义一个函数,参数为op,返回一个指针,该指针类型为拥有两个int参数、

//返回类型为int的函数指针。它的作用是根据操作符返回相应函数的地址

FP_CALC calc_func(char op)

{

switch( op )

{

case '+':

return add;

case '-':

return sub;

case '*':

return mul;

case '/':

return div;

default:

return NULL;

}

return NULL;

}

//s_calc_func为函数,它的参数是 op,

//返回值为一个拥有两个int参数、返回类型为int的函数指针

int (*s_calc_func(char op)) (int , int)

{

return calc_func(op);

}

//最终用户直接调用的函数,该函数接收两个int整数,

//和一个算术运算符,返回两数的运算结果

int calc(int a, int b, char op)

{

FP_CALC fp = calc_func(op);

int (*s_fp)(int,int) = s_calc_func(op);//用于测试

assert(fp == s_fp);// 可以断言这两个是相等的

if(fp)

return fp(a,b);

else

return -1;

}

void main()

{

int a = 100, b = 20;

printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));

printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));

printf("calc(%d,%d, %c) = %d\n", a, b, '*', calc(a, b, '*'));

printf("calc(%d,%d, %c) = %d\n", a, b, '/', calc(a, b, '/'));

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指针
    +关注

    关注

    1

    文章

    467

    浏览量

    70355
  • typedef
    +关注

    关注

    0

    文章

    23

    浏览量

    9520

原文标题:来撸代码吧-typedef函数指针用法

文章出处:【微信号:gh_dae0718828df,微信公众号:gh_dae0718828df】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言typedef与#define的用法和区别

    在C语言编程中,typedef 和 #define是最常用语句,可能很多工作过几年的工程师都没有去深究过它们的一些用法和区别。
    发表于 10-12 10:39 508次阅读

    函数指针指针函数的概念

    不少朋友会混淆“函数指针”和“指针函数”这两个概念,本文详细介绍一下。
    发表于 03-09 10:49 890次阅读

    一文详解函数指针与回调函数

    函数指针是指向函数指针变量。它允许我们将函数作为参数传递给其他函数或将
    发表于 08-22 10:36 168次阅读

    typedef的使用【转】

    的文本替换。用法一:typedef int (*MYFUN)(int, int); 这种用法一般用在给函数定义别名的时候上面的例子定义MYFUN 是一个
    发表于 07-27 11:06

    关于typedef用法总结

    则可行:typedef char* PCHAR;PCHAR pa, pb;这种用法很有用,特别是char* pa, pb的定义,初学者往往认为是定义了两个字符型指针,其实不是,而用typede
    发表于 09-25 09:11

    typedef与define的用法与区别

    typedef与define在一些用法上有一些相似之处,所以对于这方面接触不多的朋友可能会有所混淆,下面分享一个图,很清晰地对两者的用法作了区分。
    发表于 08-10 13:50

    关于C++中函数指针的使用

    关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用。
    发表于 07-13 03:51

    函数指针指针函数定义

    函数指针指针函数,C语言学习中最容易混淆的一些概念,好好学习吧
    发表于 01-11 16:44 0次下载

    C语言指针函数函数指针详细介绍

    C语言指针函数函数指针详细介绍。。。。。。。
    发表于 03-04 15:27 5次下载

    Typedef用法小结

    非常不错的文档有着基本数据类型结构体enum与函数指针等等的Typedef相关用法.
    发表于 11-02 11:36 19次下载

    c语言函数指针定义,指针函数函数指针的区别

     往往,我们一提到指针函数函数指针的时候,就有很多人弄不懂。下面就由小编详细为大家介绍C语言中函数指针
    发表于 11-16 15:18 3366次阅读

    ARM的函数指针指针函数的区别和用法

    在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,和大家的一些总结,整理到此。和大家分享。
    的头像 发表于 06-20 10:08 3171次阅读

    理解函数指针函数指针数组、函数指针数组的指针

    理解函数指针函数指针数组、函数指针数组的指针
    的头像 发表于 06-29 15:38 1.4w次阅读
    理解<b class='flag-5'>函数</b><b class='flag-5'>指针</b>、<b class='flag-5'>函数</b><b class='flag-5'>指针</b>数组、<b class='flag-5'>函数</b><b class='flag-5'>指针</b>数组的<b class='flag-5'>指针</b>

    C语言中的typedef用法

    见到了typedef一些奇怪的用法,比如typedef char ARR[10]这一类的用法,这时候一些人就会变成表情包了。究其原因是对typede
    发表于 01-13 13:36 0次下载
    C语言中的<b class='flag-5'>typedef</b>的<b class='flag-5'>用法</b>

    函数指针指针函数是不是一个东西?

    函数指针的本质是指针,就跟整型指针、字符指针一样,函数指针
    的头像 发表于 01-03 16:35 225次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>指针</b>和<b class='flag-5'>指针</b><b class='flag-5'>函数</b>是不是一个东西?