es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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.

Comments are closed.