函数指针帮助/整数指针

Function Pointer help/ Pointer from integer

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

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 上得到一个错误,它是 "passing argument 1 of createBinTree makes pointer from integer without a cast" 和“expected 'int (*)(void *, void *) 但参数是 int 类型。

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

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 );