解读一个令人困惑的函数原型

时间:2018-01-03 22:05:30

标签: c

我有以下函数原型:

char *(*scan)(char *, char *, char *, char *, int , int);

scanleft()是一个函数,其类型为static char *。

当我尝试编译时,我发现扫描和scanleft之间存在指针类型不匹配。

if ((subtype & 1) ^ zero) scan = scanleft; else scan = scanright;

scan()的原型是什么意思?

2 个答案:

答案 0 :(得分:2)

scan不是函数;它没有原型。

scan是指向函数的指针(指向char的指针,指向char的指针,指向char的指针,指向char的指针,{ {1}}和int)并返回指向int的指针。

根据您的说明,char也不是一个功能;它是指向scanleft的指针。

您问题中唯一的原型是:

char

......这对我来说并不容易让人感到困惑。这是6个简单的参数。

答案 1 :(得分:0)

char *(*scan)(char *, char *, char *, char *, int , int);

这定义了一个函数指针scan,它指向一个接受四个char *和两个int参数的函数,并返回一个char *

这意味着您可以执行以下操作:

char *scanLeft(char *p1, char *p2, char *p3, char *p4, int p5, int p6) {
    // do something
}
char *scanRight(char *p1, char *p2, char *p3, char *p4, int p5, int p6) {
    // do something else
}
:
scan = scanLeft;  char *xyzzy = scan("a", "b", "c", "d", 271828, 314159);
scan = scanRight; char *plugh = scan("a", "b", "c", "d", 271828, 314159);

并且通过scan函数指针进行的两次调用将转到不同的函数。