Вы делаете одну вещь неправильно - вы пытаетесь вызвать вашу функцию 'ptr' перед вызовом 'функции'. То, что вы должны были сделать, это передать только указатель на «ptr» и вызвать «ptr», используя переданный указатель из «функции», например:
void ptr(int x)
{
printf("from ptr [%d]\n", x);
}
int function(int a, int b , void (*func)(int) )
{
printf( "from function a=[%d] b=[%d]\n", a, b );
func(a); // you must invoke function here
return 123;
}
void main()
{
function( 10, 2, &ptr );
// or
function( 20, 2, ptr );
}
, что дает:
from function a=[10] b=[2]
from ptr [10]
from function a=[20] b=[2]
from ptr [20]
что вы и хотели
для
function(20, 20, ptr(20));
для работы - вам нужно иметь что-то вроде:
// 'ptr' must return sth (int for example)
// if you want its ret val to be passed as arg to 'function'
// this way you do not have to invoke 'ptr' from within 'function'
int ptr(int);
int function(int, int , int);