通常,我们使用typedef
来获取数据类型的备用名称。 例如 -typedef int(* pf)需要解释
typedef long int li; // li can be used now in place of long int
但是,什么是下面的typedef吗?
typedef int (*pf) (int, int);
通常,我们使用typedef
来获取数据类型的备用名称。 例如 -typedef int(* pf)需要解释
typedef long int li; // li can be used now in place of long int
但是,什么是下面的typedef吗?
typedef int (*pf) (int, int);
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;
}
这是一个函数指针原型。然后,您可以声明一个函数作为参数是这样的:
void RegisterCallback(pf your_callback_func);
然后,你可以可以调用与传递功能的FUNC PTR:
...
your_callback_func(i, j);
...
的typedef
的名称为pf
,它是一个函数指针,它将两个整数作为参数并返回一个整数。
typedef
作品:
定义unknown type
与known types
。
因此,它定义了带有两个int参数并返回int的函数类型。
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
作为替代名称。在这个例子中,新名称也出现在声明的“中间”。
很好解释.. :) – phoenix
[CDECL(http://cdecl.org)来救援!的 – milleniumbug
可能重复(http://stackoverflow.com/questions/4295432/typedef-function-pointer) – user93353
@milleniumbug [功能的typedef指针?]:你尝试了吗?语法错误! – MatthewD