类型转换函数指针

简单

我知道这是重复的。我已经搜索过,但没有一个解决我遇到的问题。注意:为了找出我的困惑,我尝试简化原始版本的类型转换。希望这不是未定义的行为

声明函数的指针

Int (*funcPtr)(void*,void*);

Strcmp声明

int strcmp (char *, char *);

类型转换函数指针

FuncPtr = (int (*)(void*, void*))strcmp

这就是我感到困惑的地方。我了解Typecasting我们创建的函数指针。因此,例如,类型转换FuncPtr只是更改了funcPtr可以指向的功能类型我还了解到,函数的名称是指向自身的函数指针,因此Typecasting strcmp并根据我的理解,

int (*)(void*, void*))strcmp 

现在,Strcmp可以指向一个函数,该函数需要两个指向void的指针并返回一个int,这显然是错误的,就像数组一样,我认为函数名称不能是指向另一个函数的指针。

由于上面的理解,我无法看到如何使用以下类型转换strcmp的地址分配FuncPtr

FuncPtr = (int (*)(void*, void*))strcmp

更改函数指针strcmp指向的内容时,不会更改参数和strcmp的返回类型

我真的很感谢我这么困惑的一些知识。

伦丁

有函数和函数指针。strcmp是一个功能,链接到您的项目。strcmp在表达式中使用标识符时,您将获得指向该函数的函数指针。但是您不能更改“ strcmp指向的位置”,因为它strcmp是一个函数而不是指针。

C允许在不同的函数指针类型之间进行转换。但是,如果您尝试通过不兼容类型的函数指针来调用函数,则会调用未定义的行为。

int (*funcPtr)(void*,void*);

与不兼容strcmp,其格式如下:

int strcmp(const char *s1, const char *s2);

含义:

funcPtr = (int(*)(void*, void*))strcmp; // this is ok but not very meaningful
funcPtr(); // this is NOT ok, invokes undefined behavior

为了strcmp通过该函数指针实际调用该函数,您必须将其强制转换为正确的类型int (*)(const char*, const char*)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章