Título: Estructuras anidadas, funciones y punteros Publicado por: NathanD en 17 Marzo 2013, 15:25 pm Buenas a todos, tengo unas cuantas dudas y espero poder resolverlas con vosotros.
Tengo que coger un ejercicio de administración de hoteles, hecho anteriormente, y hacerlo, pero esta vez usando punteros. Por ejemplo, las primeras líneas del .c con main, donde declaro la estructura y la inicializo: Código
Dicha función está definida así: Código
Como se trata de reescribir el programa usando punteros, me he limitado a cambiar el parámetro: Código
Pero no consigo hacer nada. Me da error tanto si intento acceder a la posición del hotel con aritmética de punteros Código
como accediendo a la estructura con el operador "->" Código
(Y haciendo ambas cosas juntas también de da error, claro). En cambio, si en el parámetro de la función defino hotel como indirección doble, sí que debo emplear el operador "->". Pero bueno, que tampoco tengo del todo claro por qué hay que hacerlo así, lo he hecho un poco al tuntún. Además, así da error en ejecución... Mi otra duda es si también debería modificar las estructuras anidadas, es decir, si en el primer ejercicio tengo una estructura dentro de otra de forma "simple", si ahora tengo que anidarlas usando punteros. El tema de los punteros lo tengo claro, cómo y cuándo usar los operadores, direcciones de memoria, etc. Pero ahora con las estructuras no lo tengo nada claro. Gracias de antemano, perdón por el tocho y saludos. Título: Re: Estructuras anidadas, funciones y punteros Publicado por: avesudra en 17 Marzo 2013, 16:21 pm Sería de gran ayuda que postearas los errores que te dá el compilador. A mí así me funciona perfectamente:
Código Quizás te hayas confundido al declarar las estructuras puesto que se declaran así: Código Fuente: http://c.conclase.net/curso/?cap=011 Y tu la has declarado sin el struct: Código Eso sí, si has puesto esto en el código no sé de que es el problema: Código
¡Un saludo! Título: Re: Estructuras anidadas, funciones y punteros Publicado por: NathanD en 17 Marzo 2013, 16:35 pm Hola avesudra, gracias por responder.
Así lo he hecho funcionar, modificando el parámetro de la función, solamente poniendo * en lugar de []. Pero verás, como se trata de hacer el ejercicios con punteros, asumo que debe de haber más cambios, no algo tan simple como cambiar los parámetros. Como, por ejemplo, acceder a los valores con la notación de punteros en lugar de con la de los arrays, o usando el operador -> en lugar de ., para acceder a las estructuras. Si no me he expresado con claridad sólo tienes que preguntarme :) Muchas gracias Título: Re: Estructuras anidadas, funciones y punteros Publicado por: avesudra en 17 Marzo 2013, 16:46 pm ---------------------------------------------------------------------------------------------------------------------------------------
El problema es que si desreferencias el puntero a la estructura te quedas con el valor del primer elemento de la estructura(supongo que puede ser el número de clientes o no sé, por eso no puedes acceder a nada, la primera dirección de memoria de una estructura creo que normalmente es su primer elemento, dependiendo de como se organize la memoria...)(que conste que no lo tengo claro): Código --------------------------------------------------------------------------------------------------------------------------------------- Retirando lo dicho, es un problema de sintaxis, pues así si sale: Código Pues así no está mal, lo que pasa es que obviamente tienes que apuntar el puntero a la estructura, que la creo con calloc: Código
Título: Re: Estructuras anidadas, funciones y punteros Publicado por: rir3760 en 17 Marzo 2013, 16:58 pm Como se trata de reescribir el programa usando punteros, me he limitado a cambiar el parámetro: El problema: todo parámetro declarado como un array en realidad se procesa como un puntero. Puedes hacer ese cambio pero solo es cosmético.Código
El error en esta sentencia: Código Se genera porque el operador "." tiene mayor prioridad que "*" y la expresion se evalúa así: Código Para conseguir el efecto deseado se deben utilizar paréntesis (mejor, por sencillo, utilizar "[]"). Y como ya te comentaron es mas fácil ayudarte si publicas el código fuente del programa así como los mensajes de error que se generan. Un saludo Título: Re: Estructuras anidadas, funciones y punteros Publicado por: NathanD en 17 Marzo 2013, 17:37 pm Muchas gracias a los dos :D Ya veo que era un error sintáctico, pensaba que había probado todas las formas... ;D
Me ha surgido otra duda (siento ser tan pesado). ¿Cuál es la diferencia entre Código
y Código
? Ambas opciones me las da como válidas en la misma función, independientemente de haber usado calloc o no (¿y la diferencia entre inicializar con calloc y estáticamente como un array?). Título: Re: Estructuras anidadas, funciones y punteros Publicado por: avesudra en 17 Marzo 2013, 23:30 pm Es que con el operador "->" lo que haces es acceder a un miembro ( variable ) de un puntero, y con el "." simplemente al miembro cuando no hay punteros de por medio... De ahí que cuando desreferencias con el "*" debas usar el "." . La diferencia de usar memoria dinámica ( calloc, malloc, realloc ... ) y memoria estática ( declaraciones de arrays etc ) la puedes leer aquí:
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_din%C3%A1mico_de_memoria ¡Saludos! Título: Re: Estructuras anidadas, funciones y punteros Publicado por: 85 en 18 Marzo 2013, 03:30 am El problema: todo parámetro declarado como un array en realidad se procesa como un puntero. Puedes hacer ese cambio pero solo es cosmético. El error en esta sentencia: Código Se genera porque el operador "." tiene mayor prioridad que "*" y la expresion se evalúa así: Código Para conseguir el efecto deseado se deben utilizar paréntesis (mejor, por sencillo, utilizar "[]"). Y como ya te comentaron es mas fácil ayudarte si publicas el código fuente del programa así como los mensajes de error que se generan. Un saludo haber haber haber, veamos Código
Título: Re: Estructuras anidadas, funciones y punteros Publicado por: rir3760 en 18 Marzo 2013, 04:53 am haber haber haber, veamos No te entendi. ¿Por favor puedes explicar a que te refieres con eso?... Un saludo Título: Re: Estructuras anidadas, funciones y punteros Publicado por: 85 en 18 Marzo 2013, 08:56 am a lo de acceder a los campos de la estructura con esas 2 funciones que se llaman Iniciar1 i Iniciar2 ::)
|