Funciones y punteros

Started by Rein (K´)ah Al-Ghul, February 02, 2010, 06:31:57 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Rein (K´)ah Al-Ghul

Estoy con algo similar a esto:

struct estructura[3]
int datoInt = 0;
byte datoByte = 0;
Char datoChar = "";
String datoString = "";
end

...
Function MyFuncion( pointer punteroStructura)
private
int auxiliarNumerico = 1;
String auxiliarCadeja = "Hola Mundo";
end
BEGIN
*punteroStructura[1].datoInt = auxiliarNumerico;
*punteroStructura[1].datoString = auxiliarCadeja;

END


asi es como se usan los punteros a estructuras??
el tema de subinidices de las estructuras pasadas como punteros no se bien como es...

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

Windgate

Uf vaya cacao y además hace meses que tuve mi gran batalla con los punteros en Bennu...

De momento te recomiendo:

1) Que la struct la definas como TYPE, de forma que crees un tipo de dato como int, char, string... Pero definido por tí, por ejemplo tp_estructura.

2) Con lo anterior, el parámetro de MyFuncion lo cambiaría por ( tp_estructura POINTER punteroStructura)

3) Si mal no recuerdo, con lo anterior desde dentro de MyFuncion puedes acceder con punteroStructura[1].datoInt sin necesidad del *

4) No me seas TROLAZO y no mezcles "estructura" Y "Structura" que terminarás loco :D

Espero serte de ayuda... Si te desesperas mucho empieza un .prg nuevo y haz una prueba ultra-mega-simple, con una struct con 2 campos nada más, cuanta más basura quites para probar el funcionamiento mejor. Y una vez lo resuelvas súbelo comentado y te introducimos un karma por donde ya sabes :o
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

Es posible que tengas que meter todo lo de después del asterisco entre paréntesis:
*(punteroStructura[1].datoInt) = auxiliarNumerico;
Creo que así el compilador no se lia con sobre qué estas buscando el valor, dado que el índice entre corchetes también es una forma de referenciar al contenido de un puntero.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Windgate

Razón tiene Drumpi, abusa del paréntesis, en lugar de:

*punteroStructura[1].datoInt

Pon:

(*punteroStructura)[1].datoInt
(*punteroStrctura[1]).datoInt

O lo que quieras expresar, ya que esas 2 expresiones son lo mismo ni de coña.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Rein (K´)ah Al-Ghul

gracias a ambos...
kreo ya tener medio solucionado el tema este...

pero ahora me entra otra duda
si en una funcion recibo un puntero a una estructura (esta estructura es un array de estructuras y tiene otras estructuras dentro)
en una segunda funcion que recibe pointer tambien, no debo agregar pointer al pasar como parametro verdad??
Y si mando una de las substructuras como parametro???

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

Windgate

Quotesi en una funcion recibo un puntero a una estructura (esta estructura es un array de estructuras y tiene otras estructuras dentro)
en una segunda funcion que recibe pointer tambien, no debo agregar pointer al pasar como parametro verdad??

No, a la otra función le el parámetro tal cual, aunque en la cabecera de la función sí que hay que especificar que recibe un pointer.

Si mandas una subestructura como parámetro tendrás que pasar el puntero a esa subescructura... Pruébalo, es cuestión de enredar un rato.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Futu-block

Resubo este hilo ya que no me aclaro con el tema de las funciones...
por mas que lea el manual :(

Windgate

Una función puede hacer lo mismo exactamente que un proceso, sólo veo 2 diferencias:

1) El proceso retorna un int con el id del proceso invocado, mientras que una FUNCTION puede retornar el valor que quieras.

2) Un proceso se invoca y ejecuta en paralelo con el resto de procesos, mientras que una FUNCTION bloque al proceso "padre" hasta que la FUNCTION termina.

Ejemplo de función que devuelve el resultado de una suma:

FUNCTION int sumar ( int a , int b )
BEGIN
   RETURN a+b;
END

Observa que antes del nombre de la función se especifica el tipo del dato que retorna, en este caso un int
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Futu-block

osea que una funcion es como un comprobante de algo, una orden que se dá para que realice una operacion (u otra cosa) y que te devuelva un valor ¿no?

Windgate



También se les puede poner LOOP FRAME; END y asignarles un gráfico como a cualquier otro proceso, pero al bloquear al padre no es muy aconsejable... Sólo para submenús por ejemplo, aunque para eso hay otros métodos como las señales.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Prg

creo que incluso el proseso puede retornar un valor si en su cuerpo no hay frames, la ventaja de la función es que aunque requieras algunos frames el padre se queda esperando el valor de retorno de la función, por lo tanto no continua su ejecución hasta que la función haya concluido.
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Rein (K´)ah Al-Ghul

Quote from: Windgate on February 03, 2010, 12:09:31 AM
Uf vaya cacao y además hace meses que tuve mi gran batalla con los punteros en Bennu...

De momento te recomiendo:

1) Que la struct la definas como TYPE, de forma que crees un tipo de dato como int, char, string... Pero definido por tí, por ejemplo tp_estructura.

2) Con lo anterior, el parámetro de MyFuncion lo cambiaría por ( tp_estructura POINTER punteroStructura)

3) Si mal no recuerdo, con lo anterior desde dentro de MyFuncion puedes acceder con punteroStructura[1].datoInt sin necesidad del *

4) No me seas TROLAZO y no mezcles "estructura" Y "Structura" que terminarás loco :D

Espero serte de ayuda... Si te desesperas mucho empieza un .prg nuevo y haz una prueba ultra-mega-simple, con una struct con 2 campos nada más, cuanta más basura quites para probar el funcionamiento mejor. Y una vez lo resuelvas súbelo comentado y te introducimos un karma por donde ya sabes :o
revivo el tema
sin tener q declarar la estructura como tipo de dato no se puede mandar a una funcion el puntero a la estructura??

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

Windgate

No sé responderte, siempre uso TYPE...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

Quote from: Rein (K´)ah Al-Ghul on May 04, 2010, 12:18:15 AM
Quote from: Windgate on February 03, 2010, 12:09:31 AM
Uf vaya cacao y además hace meses que tuve mi gran batalla con los punteros en Bennu...

De momento te recomiendo:

1) Que la struct la definas como TYPE, de forma que crees un tipo de dato como int, char, string... Pero definido por tí, por ejemplo tp_estructura.

2) Con lo anterior, el parámetro de MyFuncion lo cambiaría por ( tp_estructura POINTER punteroStructura)

3) Si mal no recuerdo, con lo anterior desde dentro de MyFuncion puedes acceder con punteroStructura[1].datoInt sin necesidad del *

4) No me seas TROLAZO y no mezcles "estructura" Y "Structura" que terminarás loco :D

Espero serte de ayuda... Si te desesperas mucho empieza un .prg nuevo y haz una prueba ultra-mega-simple, con una struct con 2 campos nada más, cuanta más basura quites para probar el funcionamiento mejor. Y una vez lo resuelvas súbelo comentado y te introducimos un karma por donde ya sabes :o
revivo el tema
sin tener q declarar la estructura como tipo de dato no se puede mandar a una funcion el puntero a la estructura??

podrias ser mas especifico? no me quedo claro a que te referis con enviar.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Rein (K´)ah Al-Ghul

tengo una structura como privada
y quiero mandarla como parametro a una funcion mediante un puntero...

sin tener q definirla con un type y luego usar ese tipo de dato definido, como en el ejemplo de wind


Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ