Les estructures imbricades són una característica poderosa del llenguatge C que permet definir estructures dins d'altres estructures. Aquesta capacitat és útil per modelar dades complexes de manera organitzada i jeràrquica. En aquest tema, aprendrem com crear i utilitzar estructures imbricades, amb exemples pràctics i exercicis per reforçar els conceptes.
Conceptes Clau
- Definició d'Estructures Imbricades: Una estructura imbricada és una estructura que conté una o més estructures com a membres.
- Accés a Membres d'Estructures Imbricades: Utilitzem l'operador de punt (
.
) per accedir als membres de les estructures imbricades. - Inicialització d'Estructures Imbricades: Les estructures imbricades es poden inicialitzar de manera similar a les estructures simples.
Definició d'Estructures Imbricades
Per definir una estructura imbricada, simplement incloem una estructura com a membre d'una altra estructura. Vegem un exemple:
#include <stdio.h> // Definició de l'estructura "Address" struct Address { char street[50]; char city[50]; int zipCode; }; // Definició de l'estructura "Person" struct Person { char name[50]; int age; struct Address address; // Estructura imbricada }; int main() { // Declaració i inicialització d'una variable de tipus "Person" struct Person person = {"John Doe", 30, {"123 Main St", "Anytown", 12345}}; // Accés als membres de l'estructura imbricada printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %d\n", person.address.street, person.address.city, person.address.zipCode); return 0; }
Explicació del Codi
-
Definició de l'Estructura
Address
:- Conté tres membres:
street
,city
izipCode
.
- Conté tres membres:
-
Definició de l'Estructura
Person
:- Conté tres membres:
name
,age
i una estructuraAddress
anomenadaaddress
.
- Conté tres membres:
-
Inicialització de l'Estructura
Person
:- La variable
person
es declara i s'inicialitza amb valors per aname
,age
iaddress
.
- La variable
-
Accés als Membres:
- Utilitzem l'operador de punt (
.
) per accedir als membres de l'estructuraPerson
i als membres de l'estructuraAddress
imbricada.
- Utilitzem l'operador de punt (
Exercicis Pràctics
Exercici 1: Definició i Accés a Estructures Imbricades
Defineix una estructura Book
que contingui una estructura Author
. La informació de l'autor ha d'incloure el nom i l'edat. La informació del llibre ha d'incloure el títol, l'any de publicació i l'autor.
Solució
#include <stdio.h> // Definició de l'estructura "Author" struct Author { char name[50]; int age; }; // Definició de l'estructura "Book" struct Book { char title[50]; int year; struct Author author; // Estructura imbricada }; int main() { // Declaració i inicialització d'una variable de tipus "Book" struct Book book = {"The C Programming Language", 1978, {"Brian W. Kernighan", 79}}; // Accés als membres de l'estructura imbricada printf("Title: %s\n", book.title); printf("Year: %d\n", book.year); printf("Author: %s, Age: %d\n", book.author.name, book.author.age); return 0; }
Exercici 2: Modificació de Membres d'Estructures Imbricades
Modifica el codi de l'exercici anterior per canviar el nom de l'autor a "Dennis M. Ritchie" i l'edat a 70. Mostra els valors actualitzats.
Solució
#include <stdio.h> // Definició de l'estructura "Author" struct Author { char name[50]; int age; }; // Definició de l'estructura "Book" struct Book { char title[50]; int year; struct Author author; // Estructura imbricada }; int main() { // Declaració i inicialització d'una variable de tipus "Book" struct Book book = {"The C Programming Language", 1978, {"Brian W. Kernighan", 79}}; // Modificació dels membres de l'estructura imbricada book.author.name[0] = '\0'; // Neteja el nom anterior snprintf(book.author.name, sizeof(book.author.name), "Dennis M. Ritchie"); book.author.age = 70; // Accés als membres de l'estructura imbricada printf("Title: %s\n", book.title); printf("Year: %d\n", book.year); printf("Author: %s, Age: %d\n", book.author.name, book.author.age); return 0; }
Errors Comuns i Consells
- Oblidar Inicialitzar Membres: Assegura't d'inicialitzar tots els membres de les estructures imbricades per evitar valors indeterminats.
- Accés Incorrecte als Membres: Recorda utilitzar l'operador de punt (
.
) per accedir als membres de les estructures imbricades. - Desbordament de Memòria: Quan treballis amb cadenes de caràcters, assegura't que la longitud de la cadena no excedeixi la capacitat del camp de l'estructura.
Resum
En aquesta secció, hem après com definir i utilitzar estructures imbricades en C. Hem vist com inicialitzar-les, accedir als seus membres i modificar-los. Les estructures imbricades són una eina poderosa per organitzar dades complexes de manera jeràrquica i clara. Amb la pràctica, aquestes tècniques es convertiran en una part essencial del teu arsenal de programació en C.
Curs de Programació en C
Mòdul 1: Introducció al C
- Introducció a la Programació
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsiques
Mòdul 2: Tipus de Dades i Variables
Mòdul 3: Flux de Control
Mòdul 4: Funcions
- Introducció a les Funcions
- Arguments de Funció i Valors de Retorn
- Àmbit i Durada de les Variables
- Funcions Recursives
Mòdul 5: Arrays i Strings
Mòdul 6: Punteres
Mòdul 7: Estructures i Unions
Mòdul 8: Assignació Dinàmica de Memòria
Mòdul 9: Gestió d'Arxius
- Introducció a la Gestió d'Arxius
- Lectura i Escriptura d'Arxius
- Posicionament d'Arxius
- Gestió d'Errors en Operacions d'Arxius
Mòdul 10: Temes Avançats
- Directives del Preprocessador
- Arguments de Línia de Comandes
- Llistes d'Arguments Variables
- Multifil en C
Mòdul 11: Millors Pràctiques i Optimització
- Llegibilitat del Codi i Documentació
- Tècniques de Depuració
- Optimització del Rendiment
- Consideracions de Seguretat