c-函数指针帮助/来自整数的指针



所以我正在做一项任务,我们需要将自己制作的函数传递到为我们提供的库中。

Tree * createBinTree(int (*comparePointer) (TreeDataTypePtr data1,      
TreeDataTypePtr data2), void (*destroyPointer) (TreeDataTypePtr));

是提供给我的代码。我的comparePointer函数指针是

int(*compStr)(void *, void *) = &compareName;

比较是

int compareName(void * rest1, void * rest2);

但当我像这样通过时

Tree * myTree = createBinTree((compstr)(str1,str2),die(str1));

我只在compstr上得到一个错误,即"传递createBinTree的参数1使指针从不带强制转换的整数中生成"one_answers"应为"int(*)(void*,void*),但参数的类型为int。

您需要传递函数,而不是调用函数并传递返回值:

Tree* myTree = createBinTree( compstr , die );

但这仍然是不正确的。compstrdie的类型必须与函数createBinTree:的参数类型兼容

int(*compStr)( TreeDataTypePtr , TreeDataTypePtr ) = &compareName;

在这种情况下,compareName必须是相同类型的函数。die也是如此。


请注意,当函数指针用于调用函数时,只有将其强制转换为兼容类型才会导致未定义的行为。函数指针的原始类型必须与用于调用函数的类型兼容。这将导致未定义的行为:

int(*compStr)(void *, void *) = &compareName;
Tree* myTree = createBinTree( ( int(*)(TreeDataTypePtr,TreeDataTypePtr ) )compstr , die );

最新更新