Masz rację. Wskaźnik funkcji może być wygodnie używany do wskazywania różnych funkcji tego samego typu zwrotu i przyjmowania tej samej liczby argumentów. Typy argumentów powinny być zgodne z deklaracją argumentów wskaźnika funkcji.
W twoim przypadku można zdefiniować jako wskaźnik funkcji g
:
typedef int (*g)(int);
// typedef
od wskaźnika funkcji.
g
to wskaźnik funkcji dla funkcji zwracającej wartość int
i przyjmujący jeden argument int
.
Wykorzystanie wskaźnika funkcji może być zilustrowane za pomocą prostego programu poniżej:
#include<stdio.h>
typedef int (*pointer_to_function)(int first_parameter_of_type_int, int second_parameter_of_type_int);
int my_function_returning_int_and_taking_two_int_arguments(int par1, int par2)
{
int result = par1 + par2;
return result;
}
int my_mul_function(int par1, int par2)
{
int result = par1 * par2;
return result;
}
int main()
{
int res; // returning result will be here
pointer_to_function my_fun_pointer; // declare function pointer variable;
my_fun_pointer = my_function_returning_int_and_taking_two_int_arguments; // function pointer points to `my_function_returning_int_and_taking_two_int_arguments` function
res = my_fun_pointer(2,3); // Call function through pointer
printf(" result of `my_function_returning_int_and_taking_two_int_arguments` = %d \n", res);
my_fun_pointer = my_mul_function; // now function pointer points to another function: `my_mul_function`
res = my_fun_pointer(2,3); // Call function through pointer
printf(" result of `my_mul_function` = %d \n", res);
return 0;
}
WYJŚCIE:
result of `my_function_returning_int_and_taking_two_int_arguments` = 5
result of `my_mul_function` = 6
Twój kod nie może działać, ponieważ jeśli g jest typedef, można” t nazywamy to funkcją. Czy możesz opisać, co konkretnie próbujesz zrobić? – templatetypedef
Naprawdę? Myślałem, że mój szef kazał mi użyć typedef do wykonania tej pracy. Czy możesz osiągnąć coś podobnego za pomocą #Define? – SetSlapShot
Co konkretnie próbujesz zrobić? Nie jest jasne, co próbujesz zrobić. – templatetypedef