Typedef int (* pf) нуждается в объяснении

Как правило, мы используем typedef для получения альтернативных имен для типов данных. Например -

typedef long int li; // li can be used now in place of long int

Но что делает ниже typedef?

typedef int (*pf) (int, int);

Ответ 1

typedef int (*pf) (int, int);

Это означает, что переменные, объявленные с типом pf, являются указателями на функцию, которая принимает два параметра int и возвращает int.

Другими словами, вы можете сделать что-то вроде этого:

#include <stdio.h>

typedef int (*pf)(int,int);

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

int main(void) {
    pf xyzzy = addUp;
    printf ("%d\n", xyzzy (19, 23));
    return 0;
}

Ответ 2

typedef long int li;

назначает альтернативное имя li для ввода long int.

Точно так же

typedef int (*pf) (int, int);

назначает альтернативное имя pf для ввода int (*) (int, int). Это все, что нужно.

Как вы, вероятно, заметили, объявления typedef следуют тому же синтаксису, что, скажем, объявления переменных. Единственное отличие состоит в том, что новое имя переменной заменяется новым именем типа. Таким образом, в соответствии с синтаксисом объявления C, объявленное имя может появляться "посередине" объявления, когда задействуются массив или типы функций.

В другом примере

typedef int A[10];

объявляет A в качестве альтернативного имени для типа int [10]. В этом примере новое имя также появляется "в середине" объявления.

Ответ 3

Это прототип указателя функции. Затем вы можете объявить функцию как аргумент примерно так:

void RegisterCallback(pf your_callback_func);

Затем вы можете вызвать функцию, переданную как func ptr:

...
your_callback_func(i, j);
...

Ответ 4

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

Ответ 5

typedef работает как:

Определите unknown type с помощью known types.

Таким образом, он определяет тип функции, который принимает два аргумента int и возвращает int.