web-dev-qa-db-ja.com

関数ポインターのtypedefを作成する方法

関数ポインターのtypedefを作成すれば関数ポインターを使用する方が簡単だと思いますが、構文や使用法、または関数ポインターのtypedefについて何かにつまずいたようです。

私が持っている

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

それは基本的に私が達成しようとしているもので、私はかなり新しいCプログラマーであり、これは私をやりすぎています。 <???>を置き換えるもの

32
SetSlapShot

あなたの質問は明確ではありませんが、次のようなものが欲しいと思うかもしれません。

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
78

あなたが正しいです。関数ポインターは、同じ戻り値型の同じ関数を使用する異なる関数を指すのに便利に使用できます。引数の型は、関数ポインター引数の宣言と一致する必要があります。

あなたの場合、関数ポインタgを次のように定義できます。

typedef int (*g)(int); //関数ポインタのtypedef

gは、int値を返し、1つの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 
3
sg7