[C con Clase] [Bulk] Ayuda sobre estructuras, como defino un puntero?

ZeLion Zelion_cracking en yahoo.es
Mar Sep 18 08:29:08 CEST 2007


Hola D1e6o.

 

Una de las formas para hacerlo:

Si no sabes que tipo de estructura vas a guardar en el puntero, puedes
declarar un puntero void.

Al fin y al cabo un puntero es un int que apunta a una direccion de memoria,
el problema es que no sabes la estructura interna de un puntero para poder
modificarlo, con lo que se debera hacer una conversión temporal para
modificar sus datos.

 

Veamos un ejemplo:

 

#include <stdio.h>

#include <stdlib.h>

 

typedef struct enteros{int num1,num2;} tipoent; 

typedef struct objeto {char tipo; enteros *obj1;} tipoobj; 

 

int main() 

{

      void *uno;                    // Declaracion de un puntero ‘uno’ sin
tipo definido

      tipoent *dos;                // Declarar un puntero ‘dos’ de tipo
‘tipoent’

 

      //objeto objprinc;

      dos= new(enteros);           // Asignar memoria a ‘dos’

      dos->num1=5;                 // Rellenar la estructura

      dos->num2=3;

      uno = dos;                   // el puntero ‘uno’ apunta a ‘dos’, ahora
tienen la misma direccion de memoria

      ((tipoent*)uno)->num1 = 10;  // modificamos uno con la estructura de
‘tipoent’ (‘uno’ sigue siendo void)

                                   // Ahora ‘dos->num1’ = 10.

      

 

      printf("Fin del programa\n");

      system("pause");

      return (0);

}

 

Espero haberte dado alguna idea de cómo poder afrontar el problema.

 

Solo recuerda que un puntero es tan solo una direccion de memoria guardada
en un entero (el tipo de puntero, solo es usado para poner un offset sobre
esa direccion de memoria y tener unos indices de desplazamiento que usara el
compilador, y de paso resulta mas facil e intuitivo programar con
estructuras que con offsets como en el lenguaje ensamblador)

 

 

 

.: ZeLion :.

  _____  

De: cconclase-bounces en listas.conclase.net
[mailto:cconclase-bounces en listas.conclase.net] En nombre de D1e6o!
Enviado el: martes, 18 de septiembre de 2007 0:15
Para: Lista de correo sobre C y C++
Asunto: [Bulk] [C con Clase] Ayuda sobre estructuras, como defino un
puntero?

 

Hola gente, ando con un problema con estructuras:

Quería asignar una lista pero l cual puede contener distintos de objetivo en
su enlace como ven:

nodo debe apuntar a otro nodo que puede ser de uno de los siguietes: 

nodo:
-int enteroa
-int enterob

nodo:
-float floata
-char *comentario

etc etc;

además también está la posibilidad de que sea otro nodo de mismo tipo.

El problema es que no se como debería asignar los tipos de punteros... 

#include <stdio.h>

typedef struct objeto {char tipo; puntero *obj1; puntero *obj2;} tipoobj;
//aca esta mi primer problema, como defino un puntero que pueda apuntar a
cualquier tipo de dato??
typedef struct enteros{int num1,num2;} tipoent; 
typedef struct otrotipo {int num1, char comentario[20];}tipootro;

typedef tipoobj *objprinc;
typedef tipofra *fraprinc;

int main() 
{
tipoobj *uno;
tipofra *dos;
//objeto objprinc;
uno=(tipoobj *) malloc(sizeof(tipoobj));
dos=(tipoent *) malloc(sizeof(tipoent));
uno->operac='+';
dos->num1=5;
dos->num2=3;
printf("Fin del programa\n");
return (0);
}

Lo que quisiera es lograr apuntar por uno a una variable del tipo tipoent,
tipootro o del mismo tipoobj o otros tipos que defina mas adelante sin
problemas... e incluso hasta a una variable del tipo char, supongo que no
hay problemas con esto por ocupar un puntero lo mismo para cualquier tipo
pero.. como? Alguien tiene un ayudita? 

Gracias y saludos!

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070918/770abc72/attachment.html>


Más información sobre la lista de distribución Cconclase