[ Foro de C ]

Que pasa si no casteo un puntero?

25-Oct-2020 02:13
Invitado (Mitch Sorrenstein)
1 Respuestas

PROGRAMACIÓN EN C:
QUE PASARÍA SI NO HAGO UN CASTING EN EL PUNTERO X A UN TIPO INT DE 32 BITS????? EJEMPLO:
void* x = (void*)20;
int32_t*z = x;

LO CORRECTO SERÍA:
void* x = (void*)20;
int32_t*z = (int32_t*)x;

PERO DE TODAS FORMAS DE LA PRIMERA MANERA NO ME DA ERROR Y NO SE SI ES INCORRECTO O CORRECTO


25-Oct-2020 19:41
Nacho Cabanes (+83)

Si no haces un forzado de tipos, se asume que el dato de la izquierda debe ocupar tanto como el de la derecha.

En general, eso sólo será un problema si son datos de tamaño distinto. Por ejemplo, si en tu sistema un (void*) ocupara 64 bits y lo guardas en un espacio de 32 bits, estarías desbordando tu espacio reservado y machacando datos que no te pertenecen.

Pero lo esperable en este caso es que todos los punteros ocupen lo mismo, porque todos son direcciones de memoria, así que serán 32 bits todos ellos o 64 bits todos ellos, dependiendo del sistema operativo.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)