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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


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

Desconectado Desconectado

Mensajes: 105


Ver Perfil
[C] Introduccion a estructuras y apuntadores
« en: 13 Septiembre 2013, 09:11 am »

Hola, estoy aprendiendo estructuras y apuntadores, tengo un código muy básico:
Código
  1. #include <stdio.h>
  2. void main()
  3. {
  4.    typedef struct coordinate
  5.        {
  6.            char nombre[15];
  7.            int x,y;
  8.        }coordinate;
  9.    coordinate ubicacion_01,ubicacion_02;
  10.    coordinate  *ptr_punto;
  11.    ptr_punto=&ubicacion_01;
  12.    puts("Escribe el nombre del lugar");
  13.    gets(ptr_punto->nombre);
  14.    printf("Lugar: %s",(*ptr_punto).nombre);
  15.    getch();
  16. }
  17. }

Pregunta:

Se deben inicializar las variables al crear una estructura?, si a x,y les doy el valor de cero el compilador me da error, hay algun problema si no inicializo el arreglo nombre y las variables enteras?

La sentencia typedef esta bien dentro de main? o debo declarar la estructura fuera como prototipo?
saludos!


En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: [C] Introduccion a estructuras y apuntadores
« Respuesta #1 en: 13 Septiembre 2013, 10:19 am »

Hola edr89.

Citar
Se deben inicializar las variables al crear una estructura?, si a x,y les doy el valor de cero el compilador me da error, hay algun problema si no inicializo el arreglo nombre y las variables enteras?
No es estríctamente necesario si vas a asignarle valores a sus miembros antes de utilizarlos.

Citar
La sentencia typedef esta bien dentro de main? o debo declarar la estructura fuera como prototipo?
Si la declaras dentro de la función main sólo será accesible dentro de la misma. Revisar sobre el ámbito de las variables te va a aclarar ese tema: Ambito de las variables

Un ejemplo con inicialización:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct {
  5.  char nombre[15];
  6.  float latitud;
  7.  float longitud;
  8. } coordinate;
  9.  
  10. int main()
  11. {
  12.  // inicializacion
  13.  coordinate ubicacion_01 = {"",0,0};
  14.  coordinate ubicacion_02 = {"Helsinki", 60.1699, 24.9384};
  15.  coordinate *pt1, *pt2;
  16.  
  17.  pt1 = &ubicacion_01;
  18.  pt2 = &ubicacion_02;
  19.  
  20.  printf("Escribe el nombre del lugar: ");
  21.  fgets(pt1->nombre, 16, stdin);
  22.  printf("Lugar: %s\n",pt1->nombre);
  23.  //...
  24.  printf("Lugar: %s\nLatitud: %f\nLongitud: %f",
  25.    pt2->nombre, pt2->latitud, pt2->longitud);
  26.  
  27.  getchar();
  28.  return 0;
  29. }
  30.  

Saludos :)




En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [C] Introduccion a estructuras y apuntadores
« Respuesta #2 en: 13 Septiembre 2013, 10:41 am »

Se deben inicializar las variables al crear una estructura?, si a x,y les doy el valor de cero el compilador me da error, hay algun problema si no inicializo el arreglo nombre y las variables enteras?

A ver, si por inicializarlas te refieres a algo tal que:

Código
  1. typedef struct coordinate
  2. {
  3.  char nombre[15];
  4.  int x = 0,y = 0;
  5. }coordinate;

Pues no va a funcionar porque ahí estás definiendo el formato de la estructura, pero no estás reservando memoria para su uso.

Sin embargo cuando sí puedes inicializarla es una vez hayas creado alguna instancia de dicha estructura:

Código
  1. void func( )
  2. {
  3.  coordinate estructura;
  4.  *estructura.nombre = 0;
  5.  estructura.x= 0;
  6.  estructura.y= 0;
  7.  
  8.  // ...
  9. }

Los beneficios de inicializar las variables es que así garantizas que tienen valores válidos... esto es especialmente importante con punteros.

La sentencia typedef esta bien dentro de main? o debo declarar la estructura fuera como prototipo?

Lo lógico y normal es declarar las estructuras fuera de las funciones, de esta forma puedes utilizar dicha estructura desde cualquier parte del código simplemente poniendo el include correspondiente.

Además poniendo las estructuras fuera de las funciones consigues un código más legible.
En línea

edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: [C] Introduccion a estructuras y apuntadores
« Respuesta #3 en: 13 Septiembre 2013, 17:17 pm »

Gracias a ambos por la respuesta, me ha quedado mas claro, solo se reserva espacion en memoria una vez que se crean las variables de tipo estructura.

Los beneficios de inicializar las variables es que así garantizas que tienen valores válidos... esto es especialmente importante con punteros.
Se puede inicializar toda la estructura a cero? y no las variables individuales?

No estoy seguro de abrir un nuevo tema, para crear una estructura ligada, en este caso es posible autoreferenciar? Estamos viendo en clase estructuras que contienen un apuntador que apunta a otra estructura de la misma forma que contiene tambien un apuntador que da a otra estructura etc...

Como es que se utiliza esto? o como funciona?
Se podría por ejemplo guardar el itinerario de una persona que viajó por el mundo a traves de una estructura autoreferenciada? No quiero que me den el código pero sí me ayuden a entender el concepto

de antemano gracias!

En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [C] Introduccion a estructuras y apuntadores
« Respuesta #4 en: 13 Septiembre 2013, 17:51 pm »

Se puede inicializar toda la estructura a cero? y no las variables individuales?
Es posible, solo tienes que indicar el valor del primer campo y los restantes se inicializan a 0, 0.0 o NULL dependiendo de su tipo. Por ejemplo:
Código
  1. struct foo {
  2.   int i;
  3.   double d;
  4.   char *p;
  5. };
  6.  
  7. struct foo a = {0}; /* i == 0, d == 0.0, p == NULL */

No estoy seguro de abrir un nuevo tema, para crear una estructura ligada, en este caso es posible autoreferenciar? Estamos viendo en clase estructuras que contienen un apuntador que apunta a otra estructura de la misma forma que contiene tambien un apuntador que da a otra estructura etc...

Como es que se utiliza esto? o como funciona?
Los casos mas conocidos son las listas vinculadas y arboles. Tutoriales sobre ellos los puedes descargar de la pagina (en ingles) Stanford CS Education Library.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: [C] Introduccion a estructuras y apuntadores
« Respuesta #5 en: 15 Septiembre 2013, 02:39 am »

gracias no sabia del sitio, muy util!!  :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Preguntillas sobre apuntadores en c++
Programación C/C++
vazquinhos 3 1,905 Último mensaje 23 Agosto 2012, 03:02 am
por ecfisa
Ayudenme con apuntadores sii?
Programación C/C++
thapitufa 1 1,798 Último mensaje 2 Diciembre 2012, 06:42 am
por x64core
Problema con apuntadores!!!!!!
Programación C/C++
7hongo7 7 3,920 Último mensaje 5 Julio 2013, 10:16 am
por kmilinh0
Problema con estructuras y apuntadores
Programación C/C++
angelihsahn 2 2,084 Último mensaje 31 Agosto 2013, 12:27 pm
por lanun
[C] Apuntadores a estructuras « 1 2 »
Programación C/C++
edr89 10 4,859 Último mensaje 8 Octubre 2013, 05:48 am
por edr89
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines