我认为如果我为函数指针创建了一个typedef会更容易使用函数指针,但我似乎让自己在某些语法或用法上遇到了问题,或者某些关于函数指针的typedef,我可以使用一些帮助
我有
int foo(int i){ return i + 1;}
typedef <???> g;
int hvar;
hvar = g(3)
这基本上就是我想要完成的事情,我是一个相当新的C程序员,这让我太过分了。什么取代了<???>
?
答案 0 :(得分:78)
你的问题不明确,但我想你可能想要这样的事情:
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
答案 1 :(得分:3)
你是对的。函数指针可以方便地用于指向相同返回类型的不同函数并使用相同数量的参数。 参数类型应与函数指针参数的声明匹配。
在您的情况下,您可以将函数指针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;
}
输出:
result of `my_function_returning_int_and_taking_two_int_arguments` = 5
result of `my_mul_function` = 6
答案 2 :(得分:-1)
编写函数返回函数指针的原始方法是
int (* call(void) ) (int,int);
这里call
是一个函数,它只取回一个带有2个参数并返回整数值的函数指针。注意括号,它们是绝对必要的。
以下是代码:
#include<stdio.h>
int sum(int a,int b) //sum is the function returned by call
{
return a+b;
}
int (*call(void) ) (int ,int);
int main() {
int (*p)(int,int); // way to declare a function pointer
p=call();
printf("%d\n",(*p)(8,3));
}
int( *call(void) )(int,int) {
return sum;
}