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...
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
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.
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.
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???
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.
Resubo este hilo ya que no me aclaro con el tema de las funciones...
por mas que lea el manual :(
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
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?
Sí
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.
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.
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??
No sé responderte, siempre uso TYPE...
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.
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
podes devolver punteros a esa estructura, pero el proceso que la recibe tiene que conocer el formato y ademas, si el proceso que la creo muere, entonces la estructura deja de existir tambien, a menos que la crees con malloc.
entonces puedo tener la estructura como global y trabajarla como privada mediante punteros...
Si la tienes como global, no necesitas trabajar con punteros ;)
De todas formas, usa type y te quitas la mitad de los problemas, sobre todo si trabajas con copias en lugar de punteros.
Quote from: Drumpi on May 04, 2010, 07:51:17 PM
Si la tienes como global, no necesitas trabajar con punteros ;)
De todas formas, usa type y te quitas la mitad de los problemas, sobre todo si trabajas con copias en lugar de punteros.
se accede a los datos de forma mas rapida...
revivo el hilo...
si tengo un tipo de dato propio como un array bidemensional y lo quiero pasar como puntero, que deberia acer??
seria posible usar un array de punteros que apunten a las ubiciaciones iniciales mi tipo de dato??
Te recomiendo que mires el hilo llamado "Pasar matrices como parámetro" o algo así, allí se fue exponiendo todo, el único "problema" es que pasas un puntero al array, y que debes acceder a las "celdas" calculando el offset desde el puntero, algo así como:
mi_jodido_array [ fila + columna*anchura ]
Y el array de punteros sí que se puede hacer, trabajé los punteros en Bennu hasta la saciedad con un proyecto y tengo claro que se puede hacer todo lo que se puede hacer en cualquier otro lenguaje que los tenga.
Como ya le dije por msn, la fórmula sería más bien:
mi_jodido_array[(fila*anchura)+columna]
Aunque claro, yo leo las tablas de izquierda a derecha y de arriba a abajo, en ese orden ^^U