如何为函数指针创建typedef

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)

  • 也可以`typedef`函数类型,这有点不常见,但可能更清楚,例如:`typedef int g(int); g foo; g*func =&foo;`.这对于声明(不幸的是,未定义)具有相同签名的多个函数很有用. (3认同)
  • @JonPurdy建议将其作为答案发布 (3认同)

sg7*_*sg7 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;
}
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)