Pregunta Programación en C: ¿Lanzar un puntero de vacío a un int?


Digamos que tengo un vacío * llamado ptr. ¿Cómo exactamente debo usar ptr para almacenar un int? ¿Es suficiente para escribir

ptr = (void *)5;

Si quiero guardar el número 5? ¿O debo malloc algo para guardarlo?


14
2017-10-19 21:28


origen


Respuestas:


Estás lanzando 5 ser un vacío puntero y asignándolo a ptr.

Ahora ptr apunta a la dirección de memoria 0x5 

Si eso es lo que intentas hacer ... bueno, sí, eso funciona. Tú ... probablemente no quieras hacer eso.

Cuando dice "store an int" voy a adivinar que quiere decir que realmente quiere almacenar el valor entero 5 en la memoria apuntada por el void*. Siempre que haya suficiente memoria asignada ( sizeof(int) ) podrías hacerlo con casting ...

void *ptr = malloc(sizeof(int));
*((int*)ptr) = 5;

printf("%d\n",*((int*)ptr));

30
2017-10-19 21:36



Eso funcionará en todas las plataformas / entornos donde sizeof(void*) >= sizeof(int), que es probablemente la mayoría de ellos, pero creo que no todos. Se supone que no debes confiar en eso.

Si puede, debe usar una unión en su lugar:

union {
    void *ptr;
    int i;
};

Entonces puede estar seguro de que hay espacio para adaptarse a cualquier tipo de datos y que no necesita un molde. (Simplemente no intente desreferenciar el puntero mientras tiene datos no punteros).

Alternativamente, si el motivo por el que haces esto es que estás usando un int para almacenar una dirección, en su lugar deberías usar size_t  intptr_t para que sea lo suficientemente grande como para contener cualquier valor de puntero en cualquier plataforma.


3
2017-10-19 21:40



Un puntero siempre apunta a una dirección de memoria. Entonces, si quiere guardar una variable con puntero, lo que quiere guardar en ese puntero es la dirección de memoria de su variable.


0
2017-10-20 09:34



los cast es suficiente..................


0
2017-10-19 21:30



Preguntas populares