40

我认为如果我为函数指针创建了一个 typedef 会更容易使用函数指针,但我似乎让自己在一些语法或用法或关于函数指针的 typedef 的一些东西上绊倒了,我可以使用一些帮助。

我有

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

这基本上就是我想要完成的事情。我是一个相当新的 C 程序员,这让我太过分了。什么代替<???>

4

3 回答 3

89

你的问题不清楚,但我认为你可能想要这样的东西:

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
于 2012-06-14T17:42:29.847 回答
7

你说的对。函数指针可以方便地用于指向具有相同返回类型并采用相同数量参数的不同函数。参数类型应与函数指针参数的声明相匹配。

在您的情况下,您可以将函数指针定义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 
于 2017-12-09T18:27:39.123 回答
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;
}
于 2016-05-19T20:50:41.680 回答