我知道这是一个重复的问题。我已经搜索过,但没有解决我的问题。
注意为了减少混淆,我尝试简化了原始类型转换。希望它不会产生未定义的行为。
声明函数指针。
Int (*funcPtr)(void*,void*);
strcmp声明
int strcmp (char *, char *);
函数指针的类型转换
FuncPtr = (int (*)(void*, void*))strcmp
这就是让我感到困惑的地方。我理解创建函数指针的类型转换。所以对于例如FuncPtr的类型转换只是改变了funcPtr可以指向哪种类型的函数。我也读过函数名本身就是指向其自身的函数指针,因此如果按照上述理解进行类型转换strcmp。
int (*)(void*, void*))strcmp
strcmp现在可以指向一个接受两个void指针并返回int的函数,这显然是错误的,就像数组一样,我认为函数名不能是指向另一个函数的指针。
由于我对上述内容的理解,我不明白如何使用以下类型转换将strcmp的地址分配给FuncPtr
FuncPtr = (int (*)(void*, void*))strcmp
更改函数指针strcmp所指向的内容并不会改变strcmp的参数和返回类型。
我真的很感激获得这些知识,我只是有些困惑。
int (*)(void*, void*))
的函数指针,然后将strcmp
的地址强制转换为该类型?”那么我可以回答它。但是你问题中的其他内容让它变得不明确。还有,为了记录,strcmp的格式如下,这在这里很重要:int strcmp(const char *s1, const char *s2);
。 - Lundin