Set*_*hot 33 c typedef function-pointers
我认为如果我为函数指针创建了一个typedef会更容易使用函数指针,但我似乎让自己绊倒了一些语法或用法或类似于函数指针的typedef,我可以使用一些帮助.
我有
int foo(int i){ return i + 1;}
typedef <???> g;
int hvar;
hvar = g(3)
Run Code Online (Sandbox Code Playgroud)
这基本上就是我想要完成的事情,我是一个相当新的C程序员,这让我太过分了.有什么替代<???>?
Oli*_*rth 79
你的问题不明确,但我想你可能想要这样的东西:
int foo(int i){ return i + 1;}
typedef int (*g)(int); // Declare typedef
g func = &foo; // Define function-pointer variable, and initialise
int hvar = func(3); // Call function through pointer
Run Code Online (Sandbox Code Playgroud)
你是对的。函数指针可以方便地用于指向返回类型相同、参数个数相同的不同函数。参数类型应该与函数指针参数的声明相匹配。
在您的情况下,您可以将函数指针定义g为:
typedef int (*g)(int); //typedef函数指针。
g是一个函数指针,用于返回int值并接受一个int参数的函数。
函数指针的用法可以用下面的简单程序来说明:
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
result of `my_function_returning_int_and_taking_two_int_arguments` = 5
result of `my_mul_function` = 6
Run Code Online (Sandbox Code Playgroud)