Bipop
Bipop

Reputation: 3

Function Pointer help/ Pointer from integer

So I'm doing an assignment where we need to pass functions we've made ourselves into a library provided for us.

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

Is the code I've been provided. My function pointer for the comparePointer is

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

Compare is

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

But when I pass it through like so

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

I only get an error on compstr which is "passing argument 1 of createBinTree makes pointer from integer without a cast" and "expected 'int (*)(void *, void *) but argument is of type int.

Upvotes: 0

Views: 76

Answers (1)

2501
2501

Reputation: 25752

You need to pass the function, not call the function and pass the return value:

Tree* myTree = createBinTree( compstr , die );

But this is still not correct. The types of compstr and die must be compatible with the parameter types of the function createBinTree:

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

in which case, compareName must be a function of the same type. The same goes for die.


Note that only casting function pointers to the compatible type will cause undefined behavior when they are used to call the function. The original type of the function pointer must be compatible with the type used to call the function. This will cause undefined behavior:

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

Upvotes: 1

Related Questions