Что означает это выражение C?

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

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

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

Ответ 1

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

  • (*[10]) < ---- Массив из 10 указателей
  • (*[10])(int *) < ------ Массив из 10 указателей на функции, которые имеют указатель на int в качестве аргумента
  • (void (*[10])(int *)) < ------ Массив из 10 указателей на функции, который имеет указатель на int в качестве своего аргумента и возвращает void
  • (*x)(void (*[10])(int *)) < ------- x является указателем на функцию, которая имеет в качестве аргумента (массив из 10 указателей на функции, который имеет указатель на int в качестве аргумента и возвращает void)

.....

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

Ответ 2

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

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

Ответ 5

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

Источник