专栏首页开源519函数指针的实例讲解(下)

函数指针的实例讲解(下)

引言:

在上篇说道当函数指针作为参数,需要通过typedef将函数指针重新声明便于使用。这篇主要讲解一下typedef的这种用法。

介绍

[百度百科]: typedef是在计算机编程语言中用来为复杂的声明定义简单的别名,它与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。

注意:typedef是为复杂的声明重新取一个一个简单的别名,即这个别名就是一个变量类型,可以重新定义变量。这一点与#define是不一样的。举个栗子:

typedef char* pStr1;
#define pStr2 char* 
pStr1 s1,s2;
pStr2 s3,s4;

其中s1、s2、s3都是char*类型,而s4是char类型。因为此时pStr1就是一个定义char*类型的数据类型,而pStr2只是char的替换,所以展开就成char *s3,s4。

C变量声明

以上基本了解了typedef的功能,在正式讲解typedef函数指针用法之前还需要重新认识一下C变量的声明。变量的声明由两部分组成:类型和类似于表达式的声明符。声明符从表面上看与表达式类似,对其求值应该返回一个声明中给定类型的结果。 最简单的声明符就是单个变量,如:

float f, g;

这个声明的含义是当对其求值时,f,g表达式会返回float类型的结果。

同样的函数声明:

float ff();

这个声明的含义是表达式ff()求值结果是一个浮点数,也就是ff是一个返回值为浮点型的函数地址。

同理指针的声明:

float *pf;

这个含义是*pf求值结果是一个浮点数,pf则就是一个指向浮点数的指针。

由此引出函数指针的声明:

float (*pf)()

含义:首先(*pf)()返回值为float的函数,*pf是该函数地址,pf就是指向该函数的指针。

一旦明白变量的声明,那么该变量类型的类型转换符就很容易得到:只需要将声明中的变量名和末尾的分号去掉,再将剩余部分用()封装起来即可得到。例如:

float (*pf)();

表示pf是一个指向返回值为浮点型函数的指针,因此,

(float (*)())

表示一个"指向返回值为浮点型函数的指针"的类型转换符。

typedef函数指针用法

了解了类型转换符,我们就很容易声明一个执行函数类型的函数指针了。例如要声明一个指向参数为一个float,返回值为int的函数指针:

int (*func)(int);//注意变量名处在表达式的位置

利用typedef能够更加快速的声明一个函数指针:

typedef int (*PTASK)(int);
PTASK task1;

含义: 首先PTASK类型转换符是一个指向参数为一个int,返回值为int的函数指针,typedef声明后的PTASK,即为可声明“一个指向参数为一个int,返回值为int的函数指针”的数据类型。 然后PTASK声明task1,则task1类型转换符与PTASK保持一致,即int ()(int),则其本身相当于int (task1)(int)。

本文分享自微信公众号 - 开源519(Embed_Taoist),作者:拂去尘世尘

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 模拟入栈操作

    开源519
  • MTK添加按键流程

    ② 更改input_event_codes.h,增加新增按键键值。(找不到路径就搜索)

    开源519
  • 并发与竞态 (自旋锁)

    由以上介绍大概了解,自旋锁就是内核为防止临界区被多个进程同时访问出错的一种机制。其作用是保证临界区在任一时刻有且仅有一个进程访问。

    开源519
  • NDK学习笔记(三)SWIG:自动生成JNI代码

    SWIG 的全称是 Simplified Wrapper and Interface Generator,它是一个开发工具,在Android Native开发中...

    LeoXu
  • 软件研发成本构成中的间接成本包括哪些?

      软件研发的间接成本为组织级成本,服务于整体研发活动,只要该组织还有软件研发活动,该成本就会发生,而不会因某个特定项目的结束或中止而不再发生。间接成本又分为...

    软件成本造价评估
  • xx=page++差点导致线上事故

    部门提供了一个对外接口给组外同事使用,今天早上活动大促通过监控发现,该接口请求量大增,3小时60几万次,非常恐怖,而db又都是平峰,通过调用链发现该redis ...

    逍遥壮士
  • 官网PYthon语言参考手册The Py

    This reference manual describes the syntax and “core semantics” of the language...

    py3study
  • 无人车致命车祸视频曝光:Uber技术失败的实锤,一场本可避免的灾难

    前几天,全球首次无人车导致行人死亡的悲剧发生后,事发地坦佩市的警察局长Sylvia Moir曾对《旧金山纪事报》表示:这场车祸无论是不是人类驾驶,都是不可避免的...

    量子位
  • DAY45:阅读Surface Object API

    Surface functions are only supported by devices of compute capability 2.0 and hi...

    GPUS Lady
  • 图片不变形,宽高不超出父元素的情况下旋转图片

    如题,具体的效果见这里 。做这样的效果的难点在于,计算没旋转前图片的宽,高和旋转后的宽高。

    Joel

扫码关注云+社区

领取腾讯云代金券