typedef int(*pf)需要解释

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)


AnT*_*AnT 5

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].在此示例中,新名称也出现在声明的"中间".