Может кто-нибудь объяснить это? - PullRequest
1 голос
/ 27 января 2011

что вы подразумеваете под следующей строкой?

void(*fnctn)(void(*)(int *,void **),int(*)(void**,int*));

Ответы [ 5 ]

12 голосов
/ 27 января 2011

По сути, у вас есть указатель функции 'fnctn', который принимает два указателя функции для своих двух параметров.Если мы разберем это постепенно, то у вас получится следующее:

Первый параметр void(*)(int*, void**) - это указатель на функцию, возвращающий void и принимающий int * и void ** в качестве двух параметров.

Второй параметр int(*)(void**, int*) - это указатель на функцию, возвращающий значение int и принимающий void ** и int * в качестве двух своих параметров.

Может быть, яснее будет увидеть следующее:

typedef void(*param1)(int *, void**);
typedef int(*param2)(void**, int*);
typedef void(*fnctn)(param1, param2);
4 голосов
/ 27 января 2011
$ cdecl
Type `help' or `?' for help
cdecl> explain void(*fnctn)(void(*)(int *,void **),int(*)(void**,int*));
declare fnctn as pointer to function (pointer to function (pointer to int, pointer to pointer to void) returning void, pointer to function (pointer to pointer to void, pointer to int) returning int) returning void
cdecl> 
2 голосов
/ 27 января 2011

Ух, ну, здесь бы неплохо было бы использовать typedef или два, но там написано ...

объявляет указатель на функцию, которая возвращает void с идентификатором "fnctn", который принимает в качестве параметров функцию, которая возвращает void и принимает в качестве параметров значения int * и void **, а также функцию, которая возвращает значение int, которое принимает void ** и int * в качестве параметров.

Дальнейшее чтение: Синтаксис указателя функции

1 голос
/ 27 января 2011

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

Ясно, как грязь.

1 голос
/ 27 января 2011

Попробуйте изучить правило спирали по часовой стрелке: http://c -faq.com / decl / spiral.anderson.html С этим вы можете узнать, что будет означать любое объявление функции, что позволит вамопределите, что он делает.

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