Muchas gracias Steven!<br>Me aclara muchas dudas como esperas, pero hay otras que me surgieron, te las comento.<br><br>(int *) uno->obj1 = (int *) malloc( sizeof(int) );<br><br>Porque necesito indicar que es un puntero con el primer int* si lo hice anteriormente o es optativo?
<br><br>Y por otro lado, es necesario decirle al compilador que voy a usar uno u otro tipo de datos? Como son punteros, no es lo mismo no convertir tipos en este caso? (simplificaría mucho las cosas aunque no creo que sea posible pero pregunto por las dudas)
<br><br>Muchas gracias por todo! Saludos!<br><br><div><span class="gmail_quote">El día 17/09/07, <b class="gmail_sendername">Steven Richard Davidson</b> <<a href="mailto:stevenrichard.davidson@gmail.com">stevenrichard.davidson@gmail.com
</a>> escribió:</span><blockquote class="gmail_quote" style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; margin-left: 0.80ex; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; padding-left: 1ex">
Hola Diego,<br><br>On 9/17/07, D1e6o! <<a href="mailto:diegogeid@gmail.com">diegogeid@gmail.com</a>> wrote:<br>> Hola gente, ando con un problema con estructuras:<br>><br>> Quería asignar una lista pero l cual puede contener distintos de objetivo en
<br>> su enlace como ven:<br>><br><br>[CORTE]<br><br>> Lo que quisiera es lograr apuntar por uno a una variable del tipo tipoent,<br>> tipootro o del mismo tipoobj o otros tipos que defina mas adelante sin<br>
> problemas... e incluso hasta a una variable del tipo<br>> char, supongo que no hay problemas con<br>> esto por ocupar un puntero lo mismo para<br>> cualquier tipo pero.. como? Alguien tiene un ayudita?<br>>
<br><br>Si estás usando C y no C++, entonces vas por buen camino. Lo que debes<br>hacer es aplicar cástings al tipo "correcto" cada vez que quieras usar<br>el puntero. Usando to ejemplo, haríamos lo siguiente:<br>
<br><br>int main()<br>{<br>  tipoent suma;<br>  tipoobj *uno;<br><br>  uno = (tipoobj *) malloc( sizeof(tipoobj) );<br><br>  uno->operac = '+';<br>  (tipoent *) uno->obj1 = (tipoent *) malloc( sizeof(tipoent) );
<br>  uno->obj2 = NULL;<br><br>  ((tipoent *) uno->obj1)->num1 = 10;<br>  ((tipoent *) uno->obj1)->num2 = 20;<br><br>  suma = ((tipoent *) uno->obj1)->num1 + ((tipoent *) uno->obj1)->num2;<br><br>
  printf( "%d + %d = %d", ((tipoent *) uno->obj1)->num1, ((tipoent *)<br>uno->obj1)->num2, suma );<br><br>  return 0;<br>}<br><br><br>Es algo engorroso, porque tienes que estar haciendo cástings para
<br>cualquier operación que quieras hacer. Además, si no sabes el tipo<br>"correcto", entonces vas a tener que comprobar el "tipo", seguramente<br>con un 'switch/case'. Por ejemplo,<br><br>uno = (tipoobj *) malloc( sizeof(tipoobj) );
<br><br>scanf( "%c", &operacion );<br><br>switch( operacion )<br>{<br>  case '+':<br>    uno->operac = '+';<br>    (int *) uno->obj1 = (int *) malloc( sizeof(int) );<br>    (int *) uno->obj2 = (int *) malloc( sizeof(int) );
<br>  break;<br><br>  case '-':<br>    uno->operac = '-';<br>    (int *) uno->obj1 = (int *) malloc( sizeof(int) );<br>    (int *) uno->obj2 = (int *) malloc( sizeof(int) );<br>  break;<br><br>  case '*':
<br>    uno->operac = '*';<br>    (int *) uno->obj1 = (int *) malloc( sizeof(int) );<br>    (int *) uno->obj2 = (int *) malloc( sizeof(int) );<br>  break;<br>}<br><br>Para poder manipular los parámetros, haríamos algo parecido a lo siguiente:
<br><br>scanf( "%d %d", &((int *) uno->obj1)->num1, &((int *) uno->obj1)->num2 );<br><br><br>En cuanto a la definición de la estructura 'tipoobj', puedes usar<br>'void *' o incluso 'char *'. La verdad es que da igual que tipo de
<br>puntero escojas, porque siempre vas a aplicar un cásting. Esto sería,<br><br>typedef struct objeto<br>{<br>  char tipo;<br>  void *obj1;<br>  void *obj2;<br>} tipoobj;<br><br><br>Espero que esto te aclare las dudas.<br>
<br>Steven<br><br>_______________________________________________<br>Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br><a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net">
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote>
</div><br>