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

Operador reinterpret_cast

Estas en el tema de Operador reinterpret_cast en el foro de C/C++ en Foros del Web. Podrian porfavor, explicar la siguiente linea de codigo: fsalida.write(reinterpret_cast<char *>(&pepe), sizeof(tipoRegistro)); Entiendo que "reinterpret_cast sirve para hacer un cambio de tipo, sin embargo, no alcanzo ...
  #1 (permalink)  
Antiguo 26/07/2008, 23:28
 
Fecha de Ingreso: julio-2008
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Operador reinterpret_cast

Podrian porfavor, explicar la siguiente linea de codigo:

fsalida.write(reinterpret_cast<char *>(&pepe),
sizeof(tipoRegistro));

Entiendo que "reinterpret_cast sirve para hacer un cambio de tipo, sin embargo, no alcanzo a ver que se cambia en esta linea de codigo ya que solo veo a un objeto "Pepe".

Y en general agradeceria si explicaran que hace la linea de codigo, especificamente lo que esta dentro del parentesis.

Gracias por la ayuda.

Nota: El ejercicio se encuentra en esta pagina:
http://www.conclase.net/c/curso/index.php?cap=039

En el tema, "Ficheros Binarios".
  #2 (permalink)  
Antiguo 27/07/2008, 22:30
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Operador reinterpret_cast

Cita:
Entiendo que "reinterpret_cast sirve para hacer un cambio de tipo, sin embargo, no alcanzo a ver que se cambia en esta linea de codigo ya que solo veo a un objeto "Pepe".
El objeto pepe es de tipo "tipoRegistro" y la función write espera recibir un apuntador de tipo char, lo que hace reinterpret_cast<char *>(&pepe) es convertir el apuntador de tipo tipoRegistro, que sería "&pepe", a un apuntador tipo char "reinterpret_cast<char *>".

Por ejemplo si se tuviera el siguiente código:
Código:
char *s;
s=new char[25];
strcpy(s, "Hola Mundo!");
fsalida.write(s, 25);
delete[] s;
no necesito hacer conversión de apuntadores ya que la variable "s" es en sí misma un apuntador a char, y eso es lo que necesita la función.


Cita:
Y en general agradeceria si explicaran que hace la linea de codigo, especificamente lo que esta dentro del parentesis.
reinterpret_cast<char *>(&pepe) ya lo he explicado, sizeof(tipoRegistro) lo que hace es obtener el tamaño en bytes del objeto tipoRegistro, que en este caso está declarado como:
struct tipoRegistro {
char nombre[32];
int edad;
float altura;
};
y debe ocupar aproximadamente unos 40 bytes (en un sistema de 32bits), lo que hará la función finalmente es escribir en el archivo los datos contenidos en la variable pepe (reinterpret_cast<char *>(&pepe)) y para ello necesita conocer el tamaño de lo que se va a escribir (sizeof(tipoRegistro)).
  #3 (permalink)  
Antiguo 28/07/2008, 20:07
 
Fecha de Ingreso: julio-2008
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Operador reinterpret_cast

Jackcae, gracias por la respuesta. La leere detenidamente, ya que el tema me ha resultado bastante confuso y dificil de entender.

Gracias por la ayuda.
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 06:03.