Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: alexis33de en 28 Agosto 2010, 02:59 am



Título: Duda con estructuras (struct)
Publicado por: alexis33de en 28 Agosto 2010, 02:59 am
Hola estaba leyendo un libro de estructuras , ya q no me enseñaron eso  :-( y lo estaba viendo por mi propia cuenta  ;) y  este tiene un ejemplo de struct , en el que dice q la asignacion x=y es correcta y x=z es incorrecta (del ejercicio q coloco en la parte inferior), mi duda es de q manera se puede arreglar el codigo para x = z funcione. ::) Pues la primera solucion q le pondria seria ponerle un nombre a las struct  :rolleyes:, ahora no se si esa sea la correcta o exista otras formas para solucionarlo. Pongo este tema ya q talvez para mi sea una forma y en realidad sea otra, si alguno de ustedes me lo explicara se lo agradeceria XD SALUDOS
Ejercicio:
Código
  1. struct
  2.  {
  3.   int i;
  4.   double j;
  5.  } x,y;
  6.  
  7. struct
  8.  {
  9.  int i;
  10.  double j;
  11.  }z;


Título: Re: Duda con estructuras (struct)
Publicado por: Littlehorse en 28 Agosto 2010, 03:41 am
Los miembros no importan, pueden ser los mismos y la misma cantidad, pero si son distintas estructuras, estos pueden estar alineados de distinta forma, por lo tanto la asignación entre distintos tipos de estructura esta prohibida.

En cuanto a lo de los nombres, por mas que tuviesen el mismo nombre, son distintos tipos, para el compilador van a ser dos cosas completamente distintas.

Esto podría funcionar:

Código
  1. memcpy(&z,&x,sizeof(x));
  2.  

pero eso no quiere decir que sea correcto, invocaría comportamiento indefinido cuando menos te lo esperes debido a la posible diferencia en la alineación de los elementos de ambas estructuras. Lo que hay que tener claro es que son dos tipos distintos.
Si tenes dos estructuras completamente distintas, pero estas contienen los mismos elementos, entonces lo ideal es que utilices una misma estructura y declarar ambas bajo la misma entidad.

Por otro lado, si estas en C++, podes sobrecargar operadores u definir constructores adecuados. Igualmente dependerá del caso, en lo que respecta al ejemplo solo seria trabajo innecesario.

Saludos