Pregunta: Comprender el tamaño indefinido de "void"
En la programación en C, la palabra clave "void" representa una ausencia de tipo. Esto plantea la pregunta: ¿cuál es el tamaño de "void"?
Respuesta:
El tipo "void" no tiene un tamaño definido en C. No es un tipo válido para objetos o punteros, por lo que intentar usarlo como tal conduciría a un error de compilación. Específicamente, la declaración:
void n;
no es válida porque intenta declarar una variable de tipo void, lo cual no está permitido.
Extensión: Asignación y aritmética de punteros con punteros "void"
Aunque "void" no tiene tamaño, se puede utilizar como tipo para punteros. Sin embargo, dichos indicadores no apuntan a ningún tipo o tamaño de datos específico.
La declaración:
void *p = malloc(sizeof(void));
resultados en un error en tiempo de compilación porque intentar asignar memoria para un tipo "vacío" no tiene sentido. La función malloc requiere un tipo de datos válido para asignar memoria.
En GCC, la expresión sizeof(void) sorprendentemente se evalúa como 1. Si bien esto podría parecer que asigna un tamaño a "void", es simplemente un detalle de implementación en el que no se debe confiar.
Además, la aritmética de puntero p en un puntero "vacío" no está definida y no debe usarse. Esto se debe a que se desconoce el tipo de datos señalados por p, lo que hace imposible determinar qué significaría incrementar el puntero.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3