Подтвердить что ты не робот

Как создать typedef для указателей функций

Я думаю, что было бы проще использовать указатели на функции, если бы я создал typedef для указателя на функцию, но, похоже, я пытаюсь разобраться в синтаксисе или использовании или что-то вроде typedef для указателей на функции, и я мог бы использовать некоторые помощь.

У меня есть

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

В основном, что я пытаюсь выполнить, я довольно новый программист на С, и это слишком сильно меня забрасывает. Что заменяет <???>?

4b9b3361

Ответ 1

Ваш вопрос непонятен, но я думаю, вам может понадобиться что-то вроде этого:

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

Ответ 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;
}

ВЫВОД:

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

Ответ 3

Оригинальный способ записи функции, возвращающей указатель функции, -

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