Enrere Mòdul 7
Fonaments de Programació. Llenguatge C/C++---
Pràctica    Resum teòric Exercicis
Pràctica d'ampliació

 
Punters a estructures

El llenguatge C permet la declaració de punters a estructures de la mateixa manera que ho permet en qualsevol altre tipus de variable. En aquesta pràctica veurem com es declaren i s'utilitzen aquests punters.

 

Desenvolupament de la pràctica

Creeu un nou arxiu del tipus C anomenat m7p02.c i escriviu el següent codi:

// m7p02.c - Punters a estructures  -

#include <stdio.h>
#define MAXTIT 40
#define MAXAUT 30
#define MAXEDI 30

struct biblio {
    char titol [MAXTIT];
    char autor [MAXAUT];
    char editorial [MAXEDI];
    float preu;
}; /* fi del patró */

int main(){

    struct biblio llibre ={
       
"EL LENGUAJE DE PROGRAMACION C",
        "Brian W. Kernighan",
        "Prentice Hall",
         3580 };

    struct biblio *punter_llibre;

    punter_llibre = &llibre;

    printf("\nLes característiques del llibre són: \n");
    printf("\n %s per %s : %.2f pts. \n", llibre.titol,
                            llibre.autor,
llibre.preu);

    printf("\n %s per %s : %.2f pts. \n",
            (*punter_llibre).titol,(*punter_llibre).autor,
            (*punter_llibre).preu);

    printf("\n %s per %s : %.2f pts. \n\n",
              punter_llibre->titol, punter_llibre->autor,
              punter_llibre->preu);

    return 0;

}

 

Captura de l'execució del programa.

La declaració de punters a estructures es fa de la forma habitual, és a dir, anteposant el caràcter ‘*’ a l'identificador del punter:

 struct biblio *punter_llibre;

A aquesta variable se li assigna com a valor inicial l'adreça de la variable d'estructura llibre:

 punter_llibre = &llibre;

En aquest moment tenim tres formes de referir-nos als camps de l'estructura:

Directament amb la variable d'estructura llibre i l'operador punt(.):

printf("\n %s per %s : %.2f pts. \n", llibre.titol,
                            llibre.autor,
llibre.preu);

Amb el punter punter_llibre i amb l'operador habitual d'indirecció *:

 printf("\n %s per %s : %.2f pts. \n",
            (*punter_llibre).titol,(*punter_llibre).autor,
            (*punter_llibre).preu);

Amb el punter punter_llibre i amb l'operador fletxa (->):

printf("\n %s per %s : %.2f pts. \n",
              punter_llibre->titol, punter_llibre->autor,
              punter_llibre->preu);

L'operador (.) connecta una estructura amb un membre de l’estructura; l’operador (->) connecta un punter amb un membre de l’estructura.