[Ayuda] Estructuras

Iniciado por Zodiak98, 21 Agosto 2013, 03:55 AM

0 Miembros y 1 Visitante están viendo este tema.

do-while

¡Buenas!

Veo que vas un poco liado. Vamos al principio (y entonces Dios separo la luz de las tinieblas y se hicieron las compañías eléctricas y vieron que aquello era bueno y obtenían beneficio...) No tan al principio... (Lo siento mucho, estudiar me sienta francamente mal (¡¡Españoles...!! (No tan francamente mal))) Ya. Stop.

Vamos a ver. Olvídate de los typedef. Cuando tu quieres crear un conjunto mixto de datos que están relacionados en una única entidad ¿qué haces? creas un struct (hasta aquí todo evidente).

La declaración del struct puedes hacerla de dos formas:

struct nombre
{
};

//o de esta otra forma
struct //y aqui ni hay nombre ni hay nada
{
};


Cuando quieres crear un tipo de dato, si declaras el struct de la primera manera, hacesstruct nombre variable;, y de la segunda forma no hay manera de declarar variables, ya que no tenemos forma de llamar al struct. Pues no, esto último es mentira. Es cierto que no podemos declarar variables de ese tipo de dato en cualquier parte del código, pero cuando creamos un struct anónimo podemos declarar una lista de variables justo entre la llave que cierra el cuerpo del struct y los dos puntos que indicar que ahí termina la definición del struct:

struct
{
}una_variable, otra_variable, ultima_variable_que_me_apetece_poner;


Estas serán las únicas variable de ese tipo de dato que puedas declarar y serán globales.

Ahora con el typedef la cosa cambia un poco. Podemos definir como al principio un struct con nombre y darle luego otra notación mas breve:
Código (cpp) [Seleccionar]

struct Original
{
    char s[10];
};
typedef struct Original Original;

Al igual que haciamos al declarar variables del struct anonimo, podemos definir una lista de alias entre la llave final y los dos puntos:
Código (cpp) [Seleccionar]

typedef struct Original
{
    char s[10];
}Cosa,Culo,Melon;

int main(int argc, char *argv[])
{
    Cosa cosa={"Cosa"};
    Culo culo={"Culo"};
    Melon melon={"Melon"};

    cout << cosa.s << endl;
    cout << culo.s << endl;
    cout << melon.s << endl;

    return 0;
}

Y podemos hacer lo mismo con un struct anónimo. En este último caso, lo que haya entre la última llave y el punto coma se considerará un alias, no una variable global del tipo del struct anónimo:
Código (cpp) [Seleccionar]


typedef struct
{
    char s[10];
}Cosa,Culo,Melon;

int main(int argc, char *argv[])
{
    Cosa cosa={"Cosa"};
    Culo culo={"Culo"};
    Melon melon={"Melon"};

    cout << cosa.s << endl;
    cout << culo.s << endl;
    cout << melon.s << endl;

    return 0;
}


Espero que te haya quedado claro.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!