14

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

typedef long int li; // li can be used now in place of long int

但是,下面的 typedef 是做什么的?

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

5 回答 5

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

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

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

#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;
}
于 2013-06-25T03:29:08.367 回答
5
typedef long int li;

将备用名称分配li给 type long int

以完全相同的方式

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

将备用名称分配pf给 type int (*) (int, int)。这就是它的全部。

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

另一个例子

typedef int A[10];

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

于 2013-06-25T03:38:32.673 回答
0

有这个typedef名字pf,它是一个函数指针,它接受两个整数作为参数并返回一个整数。

于 2013-06-25T03:30:00.740 回答
0

typedef用作:

unknown type用定义known types

所以它定义了接受两个 int 参数并返回 int 的函数类型。

于 2013-06-25T03:31:51.910 回答
0

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

void RegisterCallback(pf your_callback_func);

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

...
your_callback_func(i, j);
...
于 2013-06-25T03:29:10.603 回答