2011-11-23 26 views
22

me encontré con esta línea:¿Qué significa esta declaración C?

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

Alguien puede decirme de qué se trata?

+2

¿Es esta una prueba o algo? :) – FailedDev

+25

Ese es fácil de responder: es un desastre. –

+22

La respuesta siempre es http://www.cdecl.org. – mkb

Respuesta

41

Para descomponerlo mismo, inicio desde el más interno paréntesis y trabaja para salir.

  1. (*[10]) < ---- array de 10 punteros
  2. (*[10])(int *) < ------ array de 10 punteros a funciones que tiene un puntero a int como su argumento
  3. (void (*[10])(int *)) < --- --- array de 10 punteros a funciones que tiene un puntero a int como su argumento y devuelve void
  4. (*x)(void (*[10])(int *)) < ------- x es un puntero a una fu nción que tiene como argumento (un array de 10 punteros a funciones que tiene un puntero a int como argumento y devuelve void)

.....

que se detuvo a medias a través, pero es de esperar que ayuda

+0

Resumiría esto si tuviera más votos para usar hoy. –

+0

Me gustaría ir a tomar un café si no hubiera tenido una taza recientemente. –

3

Un puntero a una función que tiene un arreglo de 10 punteros a funciones que tiene int * argumento y volver tipo void como argumento y devuelve un puntero a una función que tiene int * argumento y retorno tipo vacío.

Source

+0

La pregunta final es, ¿cómo harías para descubrir eso, si no tuvieras esto? –

+1

@TonyTheLion, no hay preguntas sobre por qué alguien escribiría una cosa así sin descomponerla en pedazos más pequeños. –

9

cdecl es muy útil para este tipo de cosas. Dice:

declarar ax como puntero a la función (matriz 10 de puntero a la función (puntero a int) devolver void) volviendo puntero a la función (puntero a int) el regreso de vacío

Cuestiones relacionadas