elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda] Estructuras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Estructuras  (Leído 5,319 veces)
Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
[Ayuda] Estructuras
« en: 21 Agosto 2013, 03:55 am »

Bueno quisiera saber cual seria la diferencia entre hacer/programar/construir una estructura de la siguiente y de la otra manera:

Código
  1. typedef struct miestructura
  2. {
  3.     int INT_example;
  4.     float FL_example;
  5. };
  6.  
Esta es la manera más "común" (sin el typedef):
Código
  1. struct miestructura
  2. {
  3.     int INT_example;
  4.     float FL_example;
  5. };
  6.  

Alguien me explica de que sirve el typedef como prefijo de las estructuras? Perdonen mi ignorancia. Una idea que me hice es que en C tienes hacer lo siguiente:
Código
  1. typedef struct miestructura miestructura;
  2.  
Para poder crear objetos tal como se hace en C++, ya que si no se hace, los objetos se instancian de la siguiente manera:
Código
  1. struct miestructura objeto;
  2.  

Supongo que es para evitar eso... pero no estoy seguro alguien me echa una mano?  :D


« Última modificación: 21 Agosto 2013, 03:57 am por Zodiak98 » En línea

flony


Desconectado Desconectado

Mensajes: 584



Ver Perfil
Re: [Ayuda] Estructuras
« Respuesta #1 en: 21 Agosto 2013, 05:20 am »

bue...me estoy metiendo en un terreno que no conozco muy bien, el typedef es para hacer clases que si quiero sirve para int float double etc...o sea para todo tipo de numero, por dar un ejemplo con números ....para struct no sabia y menos para c...se que sirve en c++


En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
kaltorak

Desconectado Desconectado

Mensajes: 71



Ver Perfil
Re: [Ayuda] Estructuras
« Respuesta #2 en: 21 Agosto 2013, 05:57 am »

Hola Zodiak98

Mira la instrucción "typedef" sirve para renombrar un tipo de dato.

Su formato es:

Código
  1. typedef <tipo_original> <nuevo_nombre_tipo>

para que lo entiendas mejor mira este ejemplo:

Código
  1. typedef int entero; //hace que la palabra "entero" sea equivalente al tipo int

De este modo si ahora quisiéramos crear un entero podríamos hacerlo de 2 maneras.

Usando el nuevo nombre que le hemos otorgado en la linea anterior al tipo de variable "int":

Código
  1. entero num;

o como siempre:

Código
  1. int num;

Explicado esto vamos con tu pregunta, si lo pones antes de la declaración de una estructura "struct" lo único que estas haciendo es mejorar la legibilidad de tu programa, por que cuando necesites generar una estructura de ese tipo, no tendrás que incluir la palabra reservada "struct" delante del nombre que le diste a dicha estructura, te pongo el ejemplo que usaste para hacer la pregunta.

Código
  1. typedef struct
  2. {
  3.   int INT_example;
  4.   float FL_example;
  5. }miestructura;

Ahora cada vez que quieras declarar una nueva estructura del tipo "miestructura" lo harás de esta manera.

Código
  1. miestructura objeto;

Pero si no incluimos la instrucción "typedef" delante como vemos en el siguiente ejemplo:

Código
  1. struct miestructura
  2. {
  3.   int INT_example;
  4.   float FL_example;
  5. };

Ahora cuando quieras declarar una nueva estructura del tipo "miestructura" deberás incluir la palabra reservada "struct" delante de la declaración de esta manera:

Código
  1. struct miestructura objeto;

Para terminar lo que hacemos al usar "typedef" esa hacer el código más fácil de leer.

Un saludo
Kaltorak.
« Última modificación: 22 Agosto 2013, 07:54 am por kaltorak » En línea



do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: [Ayuda] Estructuras
« Respuesta #3 en: 21 Agosto 2013, 11:26 am »

¡Buenas!

Como ya te han dicho, typedef sirve para crear alias de los distintos tipos de dato que puedas tener.

De todas formas hacer esto
Código
  1. typedef struct
  2. {
  3.    //...
  4. }un_struct;
  5.  
es algo que siempre me ha parecido odioso por cuestiones de legibilidad de código.
Código
  1. struct un_struct
  2. {
  3.    //...
  4. };
  5. typedef struct un_struct un_struct;
  6.  

Queda mucho mas ordenado, primero defines un struct, y luego abrevias la notación, y puedes utilizar tanto la notacion un_struct una_variable como struct un_struct una_variable, si quieres dejar claro que el dato que estás usando es un struct. Si lo haces de la otra forma nunca podrás utilizar la notación struct un_struct ya que no habrás definido un struct con nombre, simplemente le has dado un nombre alternativo a un struct anónimo...

Ya te digo que esto simplemente es mi opinión, cada uno tiene sus gustos, pero como ya te he dicho, me parece que queda mas claro todo definiendo primero un struct con nombre, y luego redefiniendo la notación, que directamente dándole un alias a un struct sin mombre.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: [Ayuda] Estructuras
« Respuesta #4 en: 21 Agosto 2013, 17:50 pm »

Hola Zodiak98

Mira la instrucción "typedef" sirve para renombrar un tipo de dato.

Su formato es:

Código
  1. typedef <tipo_original> <nuevo_nombre_tipo>

para que lo entiendas mejor mira este ejemplo:

Código
  1. typedef int entero; //hace que la palabra "entero" sea equivalente al tipo int

De este modo si ahora quisiéramos crear un entero podríamos hacerlo de 2 maneras.

Usando el nuevo nombre que le hemos otorgado en la linea anterior al tipo de variable "int":

Código
  1. entero num;

o como siempre:

Código
  1. int num;

Explicado esto vamos con tu pregunta, si lo pones antes de la declaración de una estructura "struct" lo único que estas haciendo es mejorar la legibilidad de tu programa, por que cuando necesites generar una estructura de ese tipo, no tendrás que incluir la palabra reservada "struct" delante del nombre que le diste a dicha estructura, te pongo el ejemplo que usaste para hacer la pregunta.

Código
  1. typedef struct miestructura
  2. {
  3.   int INT_example;
  4.   float FL_example;
  5. };

Ahora cada vez que quieras declarar una nueva estructura del tipo "miestructura" lo harás de esta manera.

Código
  1. miestructura objeto;

Pero si no incluimos la instrucción "typedef" delante como vemos en el siguiente ejemplo:

Código
  1. struct miestructura
  2. {
  3.   int INT_example;
  4.   float FL_example;
  5. };

Ahora cuando quieras declarar una nueva estructura del tipo "miestructura" deberás incluir la palabra reservada "struct" delante de la declaración de esta manera:

Código
  1. struct miestructura objeto;

Para terminar lo que hacemos al usar "typedef" esa hacer el código más fácil de leer.

Un saludo
Kaltorak.

Heheheh gracias! No estaba seguro de que fuera eso pero ahora ya estoy tranquilo xD.

¡Buenas!

Como ya te han dicho, typedef sirve para crear alias de los distintos tipos de dato que puedas tener.

De todas formas hacer esto
Código
  1. typedef struct
  2. {
  3.    //...
  4. }un_struct;
  5.  
es algo que siempre me ha parecido odioso por cuestiones de legibilidad de código.
Código
  1. struct un_struct
  2. {
  3.    //...
  4. };
  5. typedef struct un_struct un_struct;
  6.  

Queda mucho mas ordenado, primero defines un struct, y luego abrevias la notación, y puedes utilizar tanto la notacion un_struct una_variable como struct un_struct una_variable, si quieres dejar claro que el dato que estás usando es un struct. Si lo haces de la otra forma nunca podrás utilizar la notación struct un_struct ya que no habrás definido un struct con nombre, simplemente le has dado un nombre alternativo a un struct anónimo...

Ya te digo que esto simplemente es mi opinión, cada uno tiene sus gustos, pero como ya te he dicho, me parece que queda mas claro todo definiendo primero un struct con nombre, y luego redefiniendo la notación, que directamente dándole un alias a un struct sin mombre.

¡Saludos!

Tienes mucha razón, bueno a mí se me hace más entendible colocando a la hora de instanciar objetos el prefijo struct, no se, supongo que se me hace más cómodo y más entendible como tú dices. :B
« Última modificación: 21 Agosto 2013, 18:01 pm por Zodiak98 » En línea

Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: [Ayuda] Estructuras
« Respuesta #5 en: 21 Agosto 2013, 17:51 pm »

Bueno me puse a practicar como me dijeron y este es mi código:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct un_struct
  5. {
  6.  int example;
  7. };
  8.  
  9. int main()
  10. {
  11.    un_struct ejemplo;
  12.  
  13.    ejemplo.example = 15;
  14.  
  15.    printf("%d",ejemplo.example);
  16.  
  17.    return 0;
  18. }
  19.  
Y me tira estos errores:
Código:
error: 'un_struct' undeclared (first use in this function)|
error: (Each undeclared identifier is reported only once|
error: for each function it appears in.)|
error: expected ';' before 'ejemplo'|
error: 'ejemplo' undeclared (first use in this function)|
||=== Build finished: 5 errors, 1 warnings ===|

Alguien me explica que estoy haciendo mal? u.u
« Última modificación: 21 Agosto 2013, 18:18 pm por Zodiak98 » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Ayuda] Estructuras
« Respuesta #6 en: 21 Agosto 2013, 19:01 pm »

Código
  1. typedef struct un_struct
  2. {
  3.  int example;
  4. };

Esa línea está mal

debería ser

Código
  1. typedef struct
  2. {
  3.  int example;
  4. } un_struct;

o bien

Código
  1. struct un_struct
  2. {
  3.  int example;
  4. };
  5.  
  6. typedef struct un_struct un_struct;

Con la segunda opción, como te han comentado antes, tendrías las dos opciones disponibles:

Código
  1. struct un_struct estructura1; // correcto
  2. un_struct estructura2; // tambien correcto
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: [Ayuda] Estructuras
« Respuesta #7 en: 21 Agosto 2013, 23:06 pm »

Y no es mejor así directamente?

Código
  1. typedef struct un_struct
  2. {
  3. int example;
  4. } un_struct;
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: [Ayuda] Estructuras
« Respuesta #8 en: 21 Agosto 2013, 23:47 pm »

Gracias a los 2 últimos comentarios ;)
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct un_struct
  5. {
  6.  
  7.    int example;
  8.  
  9. } un_struct;
  10.  
  11. int main()
  12. {
  13.    un_struct xd;
  14.  
  15.    xd.example = 15;
  16.  
  17.    printf("%d",xd.example);
  18.    return 0;
  19. }
  20.  
Me funciono perfecto! Gracias! ;)

Pero una pregunta:
Hacer esto:
Código
  1. typedef struct un_struct
  2. {
  3.  
  4.    int example;
  5.  
  6. } un_struct;
  7.  
  8. //O esto otro sin darle un nombre a la estructura
  9.  
  10. typedef struct
  11. {
  12.  
  13.    int example;
  14.  
  15. } un_struct;
  16.  

Es solo para darle orientación al programador? Pero en realidad no hay diferencia entre asignarle o no un nombre o sí? Supongo que no... es solo para darle una orientación más al programador y hacerlo más entendibe. :3
« Última modificación: 22 Agosto 2013, 00:14 am por Zodiak98 » En línea

kaltorak

Desconectado Desconectado

Mensajes: 71



Ver Perfil
Re: [Ayuda] Estructuras
« Respuesta #9 en: 22 Agosto 2013, 07:53 am »

Ups si fallo mio lo siento, cuando puse tu ejemplo no me di cuenta de que estaba mal puesto  :-[

Ya lo he corregido

Un saludo
kaltorak.

« Última modificación: 22 Agosto 2013, 07:54 am por kaltorak » En línea



Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda Programa con estructuras C
Programación C/C++
piete2 1 1,848 Último mensaje 3 Diciembre 2014, 02:58 am
por rir3760
[Ayuda]Un programa en C de Estructuras
Programación C/C++
renzo.roca 3 2,213 Último mensaje 15 Enero 2015, 00:04 am
por renzo.roca
Ayuda con estructuras de C
Programación C/C++
yonkikong 1 1,611 Último mensaje 25 Mayo 2015, 01:20 am
por Seyro97
Bingo estructuras ayuda
Programación C/C++
AYUDAAAAAA 1 2,368 Último mensaje 5 Septiembre 2017, 01:13 am
por engel lex
Ayuda con Estructuras
Programación C/C++
mari2diaz 1 2,395 Último mensaje 8 Febrero 2020, 15:31 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines