美文网首页C语言
C6. 函数指针的实例讲解(下)

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

作者: 开源519 | 来源:发表于2020-07-12 17:57 被阅读0次

1.引言

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

2.介绍

[百度百科] typedef
typedef是在计算机编程语言中用来为复杂的声明定义简单的别名,它与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。
注意:typedef是为复杂的声明重新取一个一个简单的别名,即这个别名就是一个变量类型,可以重新定义变量。这一点与#define是不一样的。举个栗子:

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

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

3. 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 (*)())

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

4.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)。

个人总结,转载请标明出处及链接,谢谢!

相关文章

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

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

  • C语言基础知识点

    函数指针与回调函数 1、函数指针:函数指针是指向函数的指针变量,以下实例声明了函数指针变量 p,指向函数 max:...

  • 函数

    1. 函数名。 函数即对象,函数名是指针(指针变量)。 每个函数都是Function类型的实例。 函数名是指针,不...

  • (十一)函数<2>

    1.函数的参数是"函数": 进阶实例: 2.内嵌函数: 另一个实例 内嵌函数可以直接引用外部函数的指针,但是该指针...

  • 第二十天

    今天董老师针对昨天的作业,又和好打架延伸了一下指针的运用。讲解了指针如何调用输入函数输出函数,指针如何在字符串比较...

  • 12.20

    今天董老师针对昨天的作业,又和好打架延伸了一下指针的运用。讲解了指针如何调用输入函数输出函数,指针如何在字符串比较...

  • 原型链

    简单回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例...

  • C5. 函数指针的实例讲解(上)

    1.函数指针概念函数[https://baike.baidu.com/item/%E5%87%BD%E6%95%B...

  • 函数声明和函数表达式

    函数实际上是Function类型的实例,因此函数是对象,函数名是指针。由于函数名仅仅是指向函数的指针,因此函数名和...

  • javascirpt复习

    实例中访问构造函数原型的指针,指向的是构造函数原型,不是构造函数; 所以重写构造函数原型对象,【实例对象】访问还是...

网友评论

    本文标题:C6. 函数指针的实例讲解(下)

    本文链接:https://www.haomeiwen.com/subject/ugxncktx.html