Punteros y estructuras.

Al igual que con el resto de tipos de variables, C permite crear variables punteros a estructuras. La forma de declarar estas variables es:

    struct nombre_estructura *nombre_varible_estructura; 
            

Para poder acceder a los elementos individuales de una variable puntero a estructura se utiliza el operador -> (el operador, denominado comunmente flecha, está formado por un signo menos seguido de un signo de mayor, sin ningún espacio en blanco entre ellos). Siguiendo con el ejemplo anterior de las coordenadas, vamos a definir un puntero a una variable de estructura de la siguiente forma:

    struct coordenada a, b, *p, *q;

    a.x = 5;
    a.y = 23;
    a.z = 10;
    
    b = a;
    p = &b; /* &b nos devuelve la dirección de la estructura b */
    
    p->x = 2;
    p->y = a.y;
    p->z = a.z;
    
    q = p; /* p y q apuntan a la misma estructura */
            

Al igual que ocurría en el apartado anterior también existe la posibilidad de declarar tablas de estructuras. El formato sería el siguiente:

    struct nombre_estructura *nombre_varible_estructura[N];
            

ó

    struct nombre_estructura *nombre_varible_estructura[N][M];
            

Por supuesto también se pueden declarar tablas de punteros a estructuras de más de dos dimensiones pero al igual que ocurría con la declaración de tablas de tipos de datos básicos, no suelen ser muy usadas.

Un ejemplo de declaración de un vector de punteros a estructuras y un acceso al campo de una estructura sería la siguiente:

    struct coordenada coor1, *vector_punteros_coordenadas[10];
    
    vector_punteros_coordenadas[4] = &coor1;
    vector_punteros_coordenadas[4]->y = 2;
            

Al igual que ocurría con los punteros a tipos básicos de datos también se pueden pasar punteros a estructuras en las llamadas a funciones. Así por ejemplo tendríamos:

struct coordenada coordenada1, *p_coordenada1;
flota distancia;
..................................
coordenada1.x = 5;
coordenada1.y = -11;
p_coordenada1 = &coordenada1;
..................................
cambiar_a_punto_simétrico_en_cuadrante (p_coordenada1);
            

ó

    cambiar_a_punto_simetrico_en_cuadrante (&coordenada1);
    ..................................
    
    
    ....
    ....
    ....
	/* La siguiente función intercambia la coordenada x por la y */
	void cambiar_a_punto_simétrico_en_cuadrante(struct coordenada *c) 
	{
		int aux;

		aux = (*c).x;
		(*c).x = (*c).y;
		(*c).y = aux;
	}            
            

Nótese la equivalencia entre la notación c->x y (*c).x


Seguir a paginadeC en Twitter Foro de Página de C ¡CSS Válido!