pho*_*nix 14 c typedef function-pointers
通常,我们使用typedef获取数据类型的备用名称.例如 -
typedef long int li; // li can be used now in place of long int
Run Code Online (Sandbox Code Playgroud)
但是,下面的typedef做了什么?
typedef int (*pf) (int, int);
Run Code Online (Sandbox Code Playgroud)
Yu *_*Hao 26
typedef int (*pf) (int, int);
Run Code Online (Sandbox Code Playgroud)
这意味着使用该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;
}
Run Code Online (Sandbox Code Playgroud)
typedef long int li;
Run Code Online (Sandbox Code Playgroud)
指定替代名称li以进行输入long int.
以完全相同的方式
typedef int (*pf) (int, int);
Run Code Online (Sandbox Code Playgroud)
指定替代名称pf以进行输入int (*) (int, int).这就是它的全部.
您可能已经注意到,typedef声明遵循与变量声明相同的语法.唯一的区别是新变量名称被新类型名称替换.因此,根据C声明语法,当涉及数组或函数类型时,声明的名称可能出现在声明符的"中间".
再举一个例子
typedef int A[10];
Run Code Online (Sandbox Code Playgroud)
声明A为类型的替代名称int [10].在此示例中,新名称也出现在声明的"中间".