Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Tamaño de datos en memoria con apuntador void

Estas en el tema de Tamaño de datos en memoria con apuntador void en el foro de C/C++ en Foros del Web. Hola!:) Tengo que hacer un programa que al pasarle un apuntador void* pueda saber si es entero (int), de punto flotante (double), un caracter (char) ...
  #1 (permalink)  
Antiguo 08/03/2011, 21:17
 
Fecha de Ingreso: marzo-2010
Ubicación: df
Mensajes: 58
Antigüedad: 14 años, 1 mes
Puntos: 5
Tamaño de datos en memoria con apuntador void

Hola!:)

Tengo que hacer un programa que al pasarle un apuntador void* pueda saber si es entero (int), de punto flotante (double), un caracter (char) o una cadena (char[]).

void miFuncion(void* apuntador);

Lo unico que se me ocurrio fue usar sizeof para saber el tamaño de memoria que ocupa el dato ya que se lo siguiente:

int --> 4 bytes
double--> 8 bytes
char --> 1 byte
char[15]--> 15 bytes

Pero si ejecuto el siguiente codigo no me arroja los resultados que espero.


Código C:
Ver original
  1. int main(){
  2.     int n = 1;
  3.     double d = 999999999999;
  4.     char c = '3';
  5.     char cadena[15] = "cadena";
  6.    
  7.     void* p = &n;
  8.     void* p2 = &d;
  9.     void* p3 = &c;
  10.     void* p4 = &cadena;
  11.    
  12.     printf("n = %d \n", sizeof(*p));
  13.     printf("d = %d \n", sizeof(d)); // si ponemos *p2 regresa 4 ¿porque?
  14.     printf("c = %d \n", sizeof(*p3));
  15.     printf("c = %d \n", sizeof(*p4)); // esto me deberia de regrasar 15 (15 bytes) 
  16. }

Saludos!
  #2 (permalink)  
Antiguo 09/03/2011, 06:02
 
Fecha de Ingreso: febrero-2011
Ubicación: Paraguay
Mensajes: 59
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Tamaño de datos en memoria con apuntador void

De esa manera al menos no vas a poder hacerlo ya que el sizeof tomará como parametro lo que tiene entre parentesis, que es un void*, por lo que siempre va darte 1. Además creo que sólo soporta que sea char o int, así que cuando apliques en una función y le pases como parámetro el double te dará un error.
  #3 (permalink)  
Antiguo 09/03/2011, 20:39
 
Fecha de Ingreso: diciembre-2010
Mensajes: 20
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Tamaño de datos en memoria con apuntador void

sizeof() retorna el tamaño que ocupan en memoria variables, objetos y punteros. En el caso de punteros siempre retornará 4 u 8 dependiendo de la arquitectura del procesador (32 o 64 bits). Por que ese es el tamaño que ocupa el puntero en memoria SIEMPRE no importa a que esté apuntando.

Respecto a la función que retorne el tipo con sólo tener un puntero a void... esa idea simplemente es una estupidez. No es posible garantizar resultados fiables al 100%.
  #4 (permalink)  
Antiguo 09/03/2011, 21:37
 
Fecha de Ingreso: marzo-2010
Ubicación: df
Mensajes: 58
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Tamaño de datos en memoria con apuntador void

Hola! :)

Voy a pensar otra forma de solucionar el problema o tal vez esta mal redactado el ejercicio. Voy a preguntarle a los ayudantes, pero no me han contestado los correos.

Gracias por responder.
  #5 (permalink)  
Antiguo 10/03/2011, 15:53
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Tamaño de datos en memoria con apuntador void

El problema esta que si es un puntero a void...antes de desreferenciarlo tenes que castearlo a algo...asi que yo creeria que no se puede saber el tamaño que habia antes.

Tranquilamente puede ser casteado a una estructura, una clase, un int, double...etc

Etiquetas: apuntador., lenguaje, memoria, tamaño, void*
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:24.