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は、値を返し、1つの引数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 に答える