c - what - tutorial de django
¿Por qué escribir un puntero vacío? (2)
Debe convertir los punteros nulos en otra cosa si desea eliminar la referencia a ellos, por ejemplo, obtiene un puntero nulo como parámetro de función y sabe con certeza que este es un número entero:
void some_function(void * some_param) {
int some_value = *some_param; /* won''t work, you can''t dereference a void pointer */
}
void some_function(void * some_param) {
int some_value = *((int *) some_param); /* ok */
}
Al ser nuevo en C, el único uso práctico que he obtenido de los punteros de vacío es para funciones versátiles que pueden almacenar diferentes tipos de datos en un puntero dado. Por lo tanto, no escribí mi puntero al hacer la asignación de memoria.
He visto algunos ejemplos de código que a veces usan punteros nulos, pero se tipifican. ¿Por qué es esto útil? ¿Por qué no crear directamente el tipo de puntero deseado en lugar de un vacío?
Hay dos razones para lanzar un puntero de vacío a otro tipo en C.
- Si desea acceder a algo al que apunta el puntero (
*(int*)p = 42
) - Si en realidad estás escribiendo código en el subconjunto común de C y C ++, en lugar de "real" C. Ver también ¿Hago el resultado de malloc?
La razón para 1 debería ser obvia. El número dos es porque C ++ no permite la conversión implícita de void*
a otros tipos, mientras que C lo permite.