Как использовать указатели на функции в структуре в C? - PullRequest
4 голосов
/ 14 января 2012

Это довольно просто, что я пытаюсь сделать, и у меня просто возникают проблемы с определением правильного синтаксиса.

Я хочу, чтобы моя структура выглядела так:

struct myStruct
{
   functionPointer myPointer;
}

Тогда у меня есть другая функция где-то еще, которая передает функцию в функцию и возвращает экземпляр моей структуры. Вот что он делает:

struct myStruct myFunction(int (*foo) (void *))
{
   myStruct c;
   c.myPointer = foo;
   return c;
}

Как я могу заставить это действительно работать? Какой правильный синтаксис для:

  1. Объявление указателя на функцию в моей структуре (очевидно, functionPointer myPointer; неверно)
  2. Назначение адреса функции для этого указателя функции (уверен, что c.myPointer = foo неверно)?

Ответы [ 2 ]

3 голосов
/ 14 января 2012

Это на самом деле ничем не отличается от любого другого экземпляра указателя функции:

struct myStruct
{
   int (*myPointer)(void *);
};

Хотя часто можно использовать typedef, чтобы привести в порядок это.

0 голосов
/ 14 января 2012

Более или менее:

struct myStruct
{
    struct myStruct (*myPointer)(int (*foo)(void *));
};
typedef struct myStruct myStruct;

Значение c.myPointer должно быть в порядке, но вам нужно вернуть копию структуры, а не указатель на исчезнувшую локальную переменную c.

struct myStruct
{
    struct myStruct (*myPointer)(int (*foo)(void *));
};
typedef struct myStruct myStruct;

struct myStruct myFunction(int (*foo) (void *))
{
    myStruct c;
    c.myPointer = foo;
    return c;
}

Это компилируется, но компилятор (разумно) жалуется, что foo не совсем правильный тип.Итак, вопрос в том, что является правильным типом для указателя функции в структуре?И это зависит от того, что вы хотите, чтобы он делал.

...