вызвать член Struct в C - PullRequest
2 голосов
/ 11 мая 2011

У меня есть вопрос, касающийся C, буду признателен тем, кто готов поделиться своими знаниями.

Пока я читал код, я наткнулся на структуру, которая называется его член так, что яникогда не видел раньше.Код в основном приведен ниже:
Код для вызова члена структуры

struct struct_name gzw;
gzw.cb = otherfunct;

, где структура определена ниже

struct struct_name {
        int bela;
        unsigned int packet;
        int (*cb)(struct struct_name *fd, unsigned int packet2);
};

Я немного смущен, потому что, как я знаю, cbчлен должен быть указателем, с двумя параметрами, не так ли?Каким образом struct_name может вызывать «cb», а не (* cb с 2 параметрами)?

Спасибо за ваш добрый ответ

Ответы [ 5 ]

1 голос
/ 11 мая 2011

cb является указателем на функцию .Вы можете назначить его для указания на любую функцию, чей прототип (т.е. номер аргумента, типы и тип возвращаемого значения) совпадает с прототипом типа указатель на функцию.

Затем вы можете вызвать эту функцию через указатель функции, как:

gzw.cb(arg1, arg2);
0 голосов
/ 11 мая 2011

да, вы правы.переменная-член cb является переменной-указателем функции, которая принимает struct struct_name* и целое число в качестве входных данных и возвращает int.

Чтобы вызвать функцию, вы должны сделать что-то вроде этого:

int ret = gzw.cb(&gzw, 10);
0 голосов
/ 11 мая 2011

элемент CB - это указатель на функцию, который принимает два параметра и возвращает и int. Вызов, который вас смущает, присваивает значение указателя и поэтому не требует ссылки на параметры. для вызова функции будут использоваться параметры gzw.cb(p1,p2).

0 голосов
/ 11 мая 2011

Да, cb - это указатель на функцию, который принимает два аргумента и возвращает int.

Неправильно говорить «имя_структуры вызывает cb». Вместо этого структура содержит указатель на функцию, который можно вызвать с помощью gzw.cb(arg1, arg2);.

0 голосов
/ 11 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...