псевдоним указателя на функцию - PullRequest
0 голосов
/ 06 июня 2018

когда у нас есть:

           int functon1(int a, int b);
           int function2(int a, int b);
           .....

           typedef int (*callback) (int,int);

           struct gate{
                  char name[50];
                  callback fptr;
                  };

Где мы дали и псевдоним с typedef и что такое обратный вызов fptr?Является ли (int, int) псевдонимом для (* callback)?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

typedef используется для определения нового типа.Это означает, что typedef int (*callback) (int,int); означает, что вы определяете новый тип с именем callback.Вы можете использовать этот тип для определения переменных.Переменная, имеющая тип callback, фактически является указателем на функцию, которая принимает два int s и возвращает int.

. Это объяснение относится к вашему struct gate, внутри которого вы определяете fptrбыть типа callback.

Вот простой пример:

#include <stdio.h>

int function1(int a, int b);
int function2(int a, int b);

typedef int (*callback) (int,int);

struct gate{
     char name[50];
     callback fptr;
};


int main(void) {
    struct gate g;
    g.fptr = function1;
    printf("The sum is: %d\n", g.fptr(4, 5));
    return 0;
}

int function1(int a, int b)
{
    return a + b;
}

Запуск вышеуказанной программы показывает: The sum is: 9

0 голосов
/ 06 июня 2018

Здесь в этом выражении

typedef int (*callback) (int,int);

/* now callback can be used as a type */

Вы определяете указатель на функцию.Здесь callback - указатель на функцию, который может указывать на любую функцию, функции должны принимать два аргумента типа int и возвращать int

В следующий раз, когда вам будет нужно

callback fptr;

, что означает fptr это указатель на функцию и может указывать на любую функцию, которая удовлетворяет callback свойствам объявления.

Далее, когда вы инициализируете fptr вот так

struct gate var;

var.fptr = sum; /* here sum is the function which adds 2 int and returns int */

...