Discussion:
Punteros a funciones "Declaraciones complicadas"
(demasiado antiguo para responder)
Alberto
2005-11-16 06:40:01 UTC
Permalink
Tengo un lio tremendo con los punteros a funciones. ¿ Alguien me
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
AnimAlf
2005-11-16 16:49:23 UTC
Permalink
¿te pareció que no aparecía el mensaje? :)))
¿ Qué pasos debo seguir para interpretar este jaleo ?
http://laurel.datsi.fi.upm.es/~rpons/personal/trabajos/curso_c/node212.html

Saludos
Alberto
2005-11-16 17:22:24 UTC
Permalink
Post by AnimAlf
¿te pareció que no aparecía el mensaje? :)))
¿ Qué pasos debo seguir para interpretar este jaleo ?
http://laurel.datsi.fi.upm.es/~rpons/personal/trabajos/curso_c/node212.html
Saludos
perdon, pero es que tengo problemas con el servidor de news. Gracias por
el enlace, pero no me ha ayudado mucho a entender como interpretar las
declaraciones que puse en el primer mensaje.

¿ Que pasos debo seguir para interpretar ese jaleo de punteros a funciones ?
Pedro Maicas
2005-11-16 18:46:36 UTC
Permalink
Post by Alberto
¿ Que pasos debo seguir para interpretar ese jaleo de punteros a funciones ?
Ahí hay más cosas, algunas son funciones (no punteros
a funciones), además tienes punteros a tipos de datos,
tienes declarados parametros que son punteros, arrays, ....

Da un poco de pereza ponerse a resolverte el ejercicio,
que seguro que te lo han mandado a ti para que aprendas,
basta mirarse la precedencia de los operadores y ver
donde estan los parentesis, no ?


Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Alberto
2005-11-17 07:20:22 UTC
Permalink
Post by Pedro Maicas
Post by Alberto
¿ Que pasos debo seguir para interpretar ese jaleo de punteros a funciones ?
Ahí hay más cosas, algunas son funciones (no punteros
a funciones), además tienes punteros a tipos de datos,
tienes declarados parametros que son punteros, arrays, ....
Da un poco de pereza ponerse a resolverte el ejercicio,
que seguro que te lo han mandado a ti para que aprendas,
basta mirarse la precedencia de los operadores y ver
donde estan los parentesis, no ?
Saludos :-) -Pedro-
http://www.maicas.net/
e-mail en www.maicas.net
pues eso es lo que quiero, aprender a resolverlo. Vamos a ver, segun
tengo entendido, la precedencia es

() [] Asociacion Izquierda-Derecha
* Asociacion Derecha-Izquierda

Ahora bien, ¿ como aplico esto a los ejemplos ? Por ejemplo, con

h) float (*x) (int (*a) []);

¿ Por donde empiezo a aplicar la precedencia de operadores ?

AnimAlf
2005-11-16 21:42:08 UTC
Permalink
Lo siento supongo que de poco te va a ayudar eso.

Es uno de mis temas que me veo no aprenderé aunque entenderé sin ayuda
exterior.

Yo lo tengo así:

Al igual que cualquier otro tipo de datos, los punteros pueden ser el
tipo de datos que recibe una función, así como el tipo de retorno.

Punteros cómo parámetros de una función:

Para definir un puntero como parámetro, tan solo hay que indicar el tipo
de puntero que es, y anteponer el operador de indirección al
identificador del paratro (*). Definiendo los parámetros como "punteros
a", se pasan los parámetros por referencia, en lugar de por valor.

Punteros como tipo retorno de una función:

Tan sólo hay que anteponer al identificador de la función este operador.
También se puede poner tras el tipo de la función (como cuando
definíamos variagbles de tipo puntero).

Un ejemplo con una función que recibe como parámetros y, retorna
punteros:

// Ej. punteros como parámtros y retorno de función.

#include <stdio.h>
#include <stdlib.h>
int *x(int *Num1, int *Num2);

void main () {
int Num1, Num2;
int *Max;

printf("Introduce un número: "); scanf("%i", &Num1);
printf("Introduce otro número: "); scanf("%", &Num2);
Max=x(&Num1,&Num2);
}

int *x(int *Num1,int *Num2) {
int AunxN;
if (*Num2>*Num1)(AuxN=*Num1=*Num2; *Num2=AuxN;}
return(Num1);
}

La función del ejemplo tan solo escoge el número mayor de los dos que
recibe. Siempre retorna un puntero al mismo lugar, puesto que lo que
hacen es intercambiar los contenidos de los punteros (que no su valor).
Los punteros Num1 y Num2 que recibe la función como parámetros, siguen
apuntando al lugar donde apuntaban al comenzar la función. Lo que se
modifica es el contenido, la posición de memoria a la que apuntan. Un
ejemplo de salida de este programa sería:

Introduce un número: 23
Introduce otro número: 61
La función MaxNum, retorna 148E:0FFE, que vale 61.
61 es mayor que 23.
***@Tecnica

No les veo ningún misterio a definición de las funciones, sí a su
interior

Saludos
Loading...