首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要解释typedef int (*pf)

需要解释typedef int (*pf)
EN

Stack Overflow用户
提问于 2013-06-25 11:27:25
回答 5查看 7.3K关注 0票数 14

通常,我们使用typedef来获取数据类型的备用名称。例如--

代码语言:javascript
复制
typedef long int li; // li can be used now in place of long int

但是,下面的类型定义函数做了什么呢?

代码语言:javascript
复制
typedef int (*pf) (int, int);
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-25 11:29:08

代码语言:javascript
复制
typedef int (*pf) (int, int);

这意味着用pf类型声明的变量是指向一个函数的指针,该函数接受两个int参数并返回一个int

换句话说,你可以这样做:

代码语言:javascript
复制
#include <stdio.h>

typedef int (*pf)(int,int);

int addUp (int a, int b) { return a + b; }

int main(void) {
    pf xyzzy = addUp;
    printf ("%d\n", xyzzy (19, 23));
    return 0;
}
票数 28
EN

Stack Overflow用户

发布于 2013-06-25 11:38:33

代码语言:javascript
复制
typedef long int li;

为类型long int指定备用名称li

以完全相同的方式

代码语言:javascript
复制
typedef int (*pf) (int, int);

为类型int (*) (int, int)指定备用名称pf。这就是它的全部。

正如您可能注意到的,typedef声明遵循与变量声明相同的语法。唯一的区别是新的变量名被新的类型名替换。因此,根据C声明语法,当涉及数组或函数类型时,声明的名称可能出现在声明符的“中间”。

再举一个例子

代码语言:javascript
复制
typedef int A[10];

A声明为类型int [10]的备用名称。在本例中,新名称也出现在声明的“中间”。

票数 5
EN

Stack Overflow用户

发布于 2013-06-25 11:29:11

它是一个函数指针原型。然后,您可以将函数声明为参数,如下所示:

代码语言:javascript
复制
void RegisterCallback(pf your_callback_func);

然后,您可以调用作为函数ptr传递的函数:

代码语言:javascript
复制
...
your_callback_func(i, j);
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17288678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档