C 解读一个混乱的函数原型
我有以下功能原型:C 解读一个混乱的函数原型,c,C,我有以下功能原型: char *(*scan)(char *, char *, char *, char *, int , int); scanleft()是一个函数,其类型为static char* 当我尝试编译时,我发现scan和scanleft之间存在指针类型不匹配 if ((subtype & 1) ^ zero) scan = scanleft; else scan = scanright; scan()的原型是什么意思?scan不是一个函数;它没有原型 scan是指向函数
char *(*scan)(char *, char *, char *, char *, int , int);
scanleft()是一个函数,其类型为static char*
当我尝试编译时,我发现scan和scanleft之间存在指针类型不匹配
if ((subtype & 1) ^ zero) scan = scanleft; else scan = scanright;
scan()的原型是什么意思?
scan
不是一个函数;它没有原型
scan
是指向函数的指针(取指向char
的指针、指向char
的指针、指向char
的指针、指向char
、int
的指针)并返回指向char
的指针
根据您的描述,scanleet
也不是一个函数;它是指向char
的指针
你问题中唯一的原型是:
char *, char *, char *, char *, int , int
。。。这对我来说并不特别令人困惑。这是6个简单的参数。
scan
不是一个函数;它没有原型
char *(*scan)(char *, char *, char *, char *, int , int);
scan
是指向函数的指针(取指向char
的指针、指向char
的指针、指向char
的指针、指向char
、int
的指针)并返回指向char
的指针
根据您的描述,scanleet
也不是一个函数;它是指向char
的指针
你问题中唯一的原型是:
char *, char *, char *, char *, int , int
。。。这对我来说并不特别令人困惑。这是6个简单的参数
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
函数指针的两个调用将转到不同的函数
这定义了一个函数指针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
函数指针进行的两个调用将指向不同的函数。该“函数原型”看起来像一个函数指针。您所说的“scanlefit()是一个函数,具有静态字符*”类型是什么意思?关键字static
不是类型的一部分,char*
不是函数类型。不相关,什么是零
?如果它是一个数值为0
的数值常量,为什么不直接使用它呢?如果是别的东西,为什么要叫它zero
?来充实一下上面的评论:cdecl程序(或网站)是你的朋友——它将C声明转换为英语,反之亦然。在上述扫描声明的情况下,它产生:“将扫描声明为指向函数的指针(指向char的指针,指向char的指针,指向char的指针,指向char的指针,int,int)返回指向char的指针”如何声明scanleet
?我们对模糊的口头描述不感兴趣。发布scanleft
的完整声明。该“函数原型”看起来像一个函数指针。您所说的“scanleft()是一个函数并且具有静态字符*”类型是什么意思?关键字static
不是类型的一部分,char*
不是函数类型。不相关,什么是零
?如果它是一个数值为0
的数值常量,为什么不直接使用它呢?如果是别的东西,为什么要叫它zero
?来充实一下上面的评论:cdecl程序(或网站)是你的朋友——它将C声明转换为英语,反之亦然。在上述扫描声明的情况下,它产生:“将扫描声明为指向函数的指针(指向char的指针,指向char的指针,指向char的指针,指向char的指针,int,int)返回指向char的指针”如何声明scanleet
?我们对模糊的口头描述不感兴趣。张贴scanleet
的准确完整声明。