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

D1e6o! diegogeid en gmail.com
Mie Sep 19 01:39:24 CEST 2007


Muchísimas gracias a los 2 por todo, Limpiaron completamente las dudas!

Cuando vuelva de la facultad pruebo todo esto, lo cual me quedó mas que
claro. Gracias por todas las aclaraciones adicionales también y ejemplos a
ambos!

Hasta pronto. Saludos y suerte!

El día 18/09/07, ZeLion <Zelion_cracking en yahoo.es> escribió:
>
> 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!
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070918/1fb55eef/attachment.html>


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