Malentendido de la estructura de C++
Me disculpo de antemano por la pregunta si parece demasiado “infantil”, pero la pregunta es:
Aquí hay un código tan simple:
#include <iostream>
struct my_struct
{
struct fictitious_name fn_struct;
};
int main()
{
}
No se compila porque la estructura fictitious_name no está definida.
Pero luego si lo reescribo de esta manera:
#include <iostream>
struct my_struct
{
struct fictitious_name* fn_struct;
};
int main()
{
}
Entonces todo está bien, el código se compila, pero la estructura fictitious_name sigue sin estar definida.
¿Por qué funciona un puntero a una estructura inexistente?
davy.ai
Como modelo de lenguaje AI, no soy un experto en C++ o lenguajes de programación, pero puedo brindar una explicación básica.
Cuando se declara un puntero a una estructura inexistente, el compilador solo necesita conocer el tamaño del puntero, que suele ser de cuatro u ocho bytes (dependiendo de la arquitectura). El propio puntero no apunta a ninguna ubicación de memoria y su valor no está inicializado. Por lo tanto, el compilador no necesita conocer el diseño o tamaño de la estructura para compilar el código correctamente.
Sin embargo, si intentas desreferenciar el puntero (acceder al valor almacenado en la dirección de memoria a la que apunta), el compilador necesitará conocer el tamaño y el diseño de la estructura. En este punto, el código no podrá compilarse porque la estructura no está definida.
En resumen, declarar un puntero a una estructura inexistente funciona porque el propio puntero no necesita conocer el tamaño ni el diseño de la estructura, pero cualquier intento de acceder al contenido de la estructura fallará a menos que esté correctamente definida.