Discussion:
Punteros a funciones "Declaraciones complicadas"
(demasiado antiguo para responder)
Alberto
2005-11-15 16:49:31 UTC
Permalink
Tengo un lio tremendo con los punteros a funciones. ¿ Alguien me podria
indicar que significan estas declaraciones ? :

a) float (*x) (int *a);
b) float (*x (int *a)) [20];
c) float x (int (*a) []);
d) float x (int *a[]);
e) float *x (int a[]);
f) float *x (int (*a) []);
g) float *x (int *a []);
h) float (*x) (int (*a) []);
i) float *(*x) (int *a []);
j) float (*x [20]) (int a);
k) float *(*x [20]) (int *a);

¿ Qué pasos debo seguir para interpretar este jaleo ?

Alberto
Principiante
2005-11-16 20:10:02 UTC
Permalink
Post by Alberto
Tengo un lio tremendo con los punteros a funciones. ¿ Alguien me podria
**Bueno, yo también lo estoy estudiando y me parece efectivamente muy
complicado todo el tema este de los punteros.
Post by Alberto
¿ Qué pasos debo seguir para interpretar este jaleo ?
**En mi caso yo encontré un libro "C. Manual de referencia" escrito
Herbert Schildt que precisamente en el tema 5 aborda el tema con mucha,
mucha claridad (lo casi-entendí hasta yo). Si lo puedes buscar en
alguna biblioteca (cuesta caro unos 53 pavos), creo te solucionará la
mayoria de las lineas.
El problema es que explicartelo (cosa que dudo hiciera bien) supondría
escribirte el tema entero (unas 20 paginas) y claro eso en las
news...resulta dificil.

Lo que si creo es que NO todo lo que tienes ahí declarado son
punteros a funciones
por ejemplo creo que cuando se declara tal que
int * [10] en realidad es un array de punteros
también veo/creo que todos utilizan 'molde explicito' y supongo que
eso es por que pasan de float a int, creo eso también te puede servir
de pista.

Espero te sirva esta info.

Saludos
Alberto
2005-11-17 08:26:50 UTC
Permalink
Post by Principiante
Post by Alberto
Tengo un lio tremendo con los punteros a funciones. ¿ Alguien me podria
**Bueno, yo también lo estoy estudiando y me parece efectivamente muy
complicado todo el tema este de los punteros.
Post by Alberto
¿ Qué pasos debo seguir para interpretar este jaleo ?
**En mi caso yo encontré un libro "C. Manual de referencia" escrito
Herbert Schildt que precisamente en el tema 5 aborda el tema con mucha,
mucha claridad (lo casi-entendí hasta yo). Si lo puedes buscar en
alguna biblioteca (cuesta caro unos 53 pavos), creo te solucionará la
mayoria de las lineas.
El problema es que explicartelo (cosa que dudo hiciera bien) supondría
escribirte el tema entero (unas 20 paginas) y claro eso en las
news...resulta dificil.
Lo que si creo es que NO todo lo que tienes ahí declarado son
punteros a funciones
por ejemplo creo que cuando se declara tal que
int * [10] en realidad es un array de punteros
también veo/creo que todos utilizan 'molde explicito' y supongo que
eso es por que pasan de float a int, creo eso también te puede servir
de pista.
Espero te sirva esta info.
Saludos
¿ me podrias dar los datos del libro ? Tengo el titulo y el autor, pero
me faltaria editorial y año de edicion y numero de paginas
Principiante
2005-11-17 16:08:00 UTC
Permalink
Post by Alberto
¿ me podrias dar los datos del libro ? Tengo el titulo y el autor, pero
me faltaria editorial y año de edicion y numero de paginas
** C. Manual de referencia (4ª Edición)
Herbert Schildt

Editorial: Osborne/McGraw-Hill
Páginas: 746
Precio editor: 53,10


El enlace al Fnac:
http://www.fnac.es/dsp/?servlet=extended.HomeExtendedServlet&Code1=594635074&Code2=223&prodID=327088

Todos los codigos de ejemplo del libro lo puedes bajar desde aqui:
http://books.mcgraw-hill.com/getpage.php?page=osborne_downloads_centercontent.php&template=osborne&PHPSESSID=c8776dab5ddd810db7dcbff34c108233#A-C

Saludos
Antoine Leca
2005-11-21 10:58:00 UTC
Permalink
Post by Alberto
Tengo un lio tremendo con los punteros a funciones. ¿ Alguien me
Voy a intentar explicarte un poco como leerlos.

Primer paso, reconocer lo que estamos declarando. Desde la izquierda,
descartar los nombres de tipos ya conocidos, los const y los *, contar los
parentesis entrantes (no debe tener ninguna saliente) hasta encontrar el
identificador declarado.
Post by Alberto
a) float (*x) (int *a);
Aquí, es x. Bién. Después, a la derecha de este debes tener tantas
parentesis salientes como has encontrado de entrantes (aquí una). Pero si
ves una otra entrante, ahora significa «función», y además los nuevos
identificadores (aquí, a) que encontras dentro de las parentesis son
realmente parametres de la función.

Una vez que has quitado el rollo de los parametres, el esquema será más
limpio: aquí resulta ser
float (*x) ();
Se lee empeziendo desde el proprio identificador, x, y respectando las
prioridades (primero lo que hay a la derecha, () o [], segundo lo que hay a
la izquierda, los *, y por fín si hay parentesis, volviendo a repetir como
si fuera un identificador: a la derecha, a la izquierda, y si hay
parentesis...
Al final solo te quedará el tipo senzillo (aquí float).

() se lee «función devolviendo...»
[] se lee «tabla de ...»
* se lee «punctando hasta ...»

Dendro de los parentesis, es lo mismo para cada uno de los parametres.


Antoine

Loading...