2012-06-14 66 views
29

我认为如果我为函数指针创建了一个typedef,那么使用函数指针会更容易,但我似乎让自己绊倒了某些语法或用法或有关typedef的某些内容函数指针,我可以使用一些帮助。如何为函数指针创建typedef

我有

int foo(int i){ return i + 1;} 
typedef <???> g; 
int hvar; 
hvar = g(3) 

这基本上就是我试图完成我是一个相当新的C程序员,这是扔我太多。什么取代<???>

+3

您的代码不可能工作,因为如果g是一个typedef,你可以”

函数指针的使用可以通过下面的简单程序来说明把它称为一个函数。你能描述一下你想要做什么吗? – templatetypedef

+0

真的吗?我以为我的老板曾告诉我使用typedef来完成这项工作。你能否用#Define完成类似的处理? – SetSlapShot

+1

你想要做什么?目前还不清楚你想要做什么。 – templatetypedef

回答

71

你的问题不太清楚,但我想你可能想是这样的:

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

'typedef'函数的类型也是可能的,这有点不常见,但可以更清楚地说明:'typedef int g(int); g foo; g * func = &foo;'。这对于声明(不幸的是,不定义)具有相同签名的多个函数很有用。 –

+2

@JonPurdy建议将该帖子发布为答案 –

0

编写函数返回函数指针的原始方式是

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; 
} 
+0

这与此问题有何关系? – morty

2

你是对的。函数指针可方便地用于指向相同返回类型的不同函数,并且采用相同数量的参数。 参数类型应该匹配函数指针参数的声明。

你的情况,你可以定义你的函数指针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; 
} 

OUTPUT:

result of `my_function_returning_int_and_taking_two_int_arguments` = 5 
result of `my_mul_function` = 6