Что означает это утверждение C? - PullRequest
24 голосов
/ 24 ноября 2011

Я наткнулся на эту строку:

void (*(*x)(void (*[10])(int *)))(int *)

Кто-нибудь может сказать мне, что это?

Ответы [ 5 ]

42 голосов
/ 24 ноября 2011

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

  1. (*[10]) <---- Массив из 10 указателей </li>
  2. (*[10])(int *) <------ Массив из 10 указателей на функции, который имеет указатель на <code>int в качестве аргумента
  3. (void (*[10])(int *)) <------ Массив из 10 указателей на функции, который имеетуказатель на <code>int в качестве аргумента и возврат void
  4. (*x)(void (*[10])(int *)) <------- <code>x - указатель на функцию, имеющую в качестве аргумента (массив из 10 указателей)функциям, которые имеют указатель на int в качестве аргумента и возвращают void)

.....

Я остановился на полпути, но, надеюсь, это поможет.

10 голосов
/ 24 ноября 2011

cdecl очень полезен для такого рода вещей. Там написано:

объявить x как указатель на функцию (массив 10 указателя на функцию (указатель на int), возвращающий void) возвращающий указатель на функцию (указатель на int), возвращающий void

3 голосов
/ 24 ноября 2011

Указатель на функцию, которая имеет массив из 10 указателей на функции с аргументом int * и возвращаемым типом void в качестве аргумента, и возвращает указатель на функцию, имеющую аргумент int * и возвращаемый тип void.

Источник

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