#include "stdio.h" int main() { void *pVoid; pVoid = (void*)0; printf("%lu",sizeof(pVoid)); return 0; }
(A) Asignar (void *)0 a pVoid no es correcto porque no se ha asignado memoria. Es por eso que no hay error de compilación, pero dará como resultado un error de tiempo de ejecución.
(B) Asignar (void *)0 a pVoid no es correcto porque un valor codificado (aquí cero, es decir, 0) no se puede asignar a ningún puntero. Es por eso que dará como resultado un error de compilación.
(C) No hay problema de compilación ni problema de tiempo de ejecución. Y el tamaño del puntero de vacío, es decir, pVoid, sería igual al tamaño de int.
(D) El operador sizeof() no está definido para un puntero de tipo vacío.
Respuesta: (C)
Explicación:(void *)0 es básicamente un puntero NULL que se usa para muchos propósitos en C. Tenga en cuenta que no importa cuál sea el tipo de puntero, cada puntero tiene alguna dirección y el tamaño de cada puntero es igual a sizeof(int). Entonces D) no es correcto. Se puede asignar una dirección absoluta a cualquier puntero, aunque podría generar problemas en el tiempo de ejecución si la dirección no es válida. Dado que 0 es una dirección legal, asignar (void *)0 a pVoid está bien. Entonces B) no es correcto. No estamos haciendo ninguna operación ilegal con pVoid aquí. Por lo tanto, no dará como resultado ningún error de tiempo de compilación/ejecución. Entonces A) no es correcto. Por ejemplo, si realizamos una operación ilegal sobre pVoid, por ejemplo, la desreferenciación del puntero de vacío, es decir, *pVoid, dará como resultado un error. El programa anterior se compilará/ejecutará sin ningún problema. Entonces C) es correcto.
Cuestionario de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA