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

Definiu un projecte nou anomenat m7p02 i afegiu-li un arxiu de font C/C++ anomenat m7p02.cpp. Escriviu el següent codi:

// m7p02.cpp: 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ó */

void 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);

}

 

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.