2013-06-25 53 views
10

通常,我们使用typedef来获取数据类型的备用名称。 例如 -typedef int(* pf)需要解释

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

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

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

[CDECL(http://cdecl.org)来救援!的 – milleniumbug

+2

可能重复(http://stackoverflow.com/questions/4295432/typedef-function-pointer) – user93353

+0

@milleniumbug [功能的typedef指针?]:你尝试了吗?语法错误! – MatthewD

回答

21
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; 
} 
+1

很好的例子,+1 – lnafziger

+0

@余浩 不错的例子,谢谢! – phoenix

0

这是一个函数指针原型。然后,您可以声明一个函数作为参数是这样的:

void RegisterCallback(pf your_callback_func); 

然后,你可以可以调用与传递功能的FUNC PTR:

... 
your_callback_func(i, j); 
... 
0

typedef的名称为pf,它是一个函数指针,它将两个整数作为参数并返回一个整数。

0

typedef作品:

定义unknown typeknown types

因此,它定义了带有两个int参数并返回int的函数类型。

4
typedef long int li; 

分配备用名li键入long int

在完全相同的方式

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

分配备用名pf键入int (*) (int, int)。这一切都有它。

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

对于另一示例

typedef int A[10]; 

声明了int [10]类型A作为替代名称。在这个例子中,新名称也出现在声明的“中间”。

+0

很好解释.. :) – phoenix