martes, 11 de enero de 2011

Estructuras en C (Parte 2)

Segunda parte sobre el tema de Estructuras en el blog. Si no has leído la primera parte, te recomiendo que la eches un ojo antes de leer esta. Puedes acceder a la entrada aquí.

Estructuras y Punteros

Al ser las estructuras, un tipo de variable, podemos acceder a su dirección ( & ). También podemos declarar punteros a Estructuras ( tipo_estructura *pt ).

Por lo tanto, para asignar la dirección de comienzo de la variable de la estructura, escribimos ( pt = &estructura )
struct my_struct
{
    int my_var;
} Estructura, *pt;

int main(void)
{
    pt = &Estructura;
    Estructura.my_var = 10;
    printf("%d\n",pt->my_var);
    return 0;
}
En este ejemplo, declaramos nuestra Estructura my_struct, y hacemos 2 implementaciones: Estructura, y un puntero a estructura. Ya en main, asignamos la dirección de Estructura a nuestro puntero pt. Podemos acceder a los miembros de Estructura desde pt, con una diferencia, al acceder mediante punteros, en vez de punto ( . ) se usa la flecha ( -> ) como podemos ver en el printf.  

(pt->my_var equivale a Estructura.my_var )

 Podemos acceder al código fuente de este ejemplo aquí.


Datos definidos por el Usuario

Podemos usar la palabra reservada typedef para definir nuevos tipos de datos que sean equivalentes a los tipos de datos existentes. Una vez definimos un nuevo tipo de dato, podemos crear variables con este tipo de datos.
typedef struct my_struct
{
    int my_var;
} Estructura;

int main(void)
{
    Estructura Nuevo;
    Nuevo.my_var = 10;
    printf("%d\n", Nuevo.my_var);
    return 0;
}
Como vemos, creamos una estructura y el nuevo tipo de dato Estructura. Dentro de main, para declarar una nueva instancia de nuestra estructura, en vez de poner ( struct nombre_estructura estructura ) basta con ( tipo_estructura estructura ).


Estructuras y Funciones

Podemos trabajar con Estructuras dentro de las funciones, pasando a las mismas sus miembros individuales o las estructuras completas. Vamos a analizar un ejemplo del paso de una estructura por referencia.
typedef struct my_struct
{
    int my_var;
} Estructura;

void initStruct(Estructura *ptvar);

int main(void)
{
    static Estructura Nuevo;
    initStruct(&Nuevo);
    printf("%d\n", Nuevo.my_var);
    return 0;
}

void initStruct(Estructura *ptvar)
{
    ptvar->my_var = 10;
}
Como vemos, creamos un tipo de dato nuevo para nuestra estructura. Seguidamente, declaramos el prototipo de función para inicializar el único miembro de nuestra estructura. Para ello, le pasamos como parámetro a nuestro procedimiento la dirección de nuestra implementación de estructura ( &Nuevo ).

El procedimiento asigna al miembro su nuevo valor a través del puntero. Podemos ver el código completo del ejemplo aquí.

No hay comentarios:

Publicar un comentario