我有以下函数原型:
char *(*scan)(char *, char *, char *, char *, int , int);
scanleft()是一个函数,其类型为static char *。
当我尝试编译时,我发现扫描和scanleft之间存在指针类型不匹配。
if ((subtype & 1) ^ zero) scan = scanleft; else scan = scanright;
scan()的原型是什么意思?
答案 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
函数指针进行的两次调用将转到不同的函数。