En el capítol anterior es va començar a analitzar les dades estructurades, en els quals es van exposar taules i demostradors. En aquesta ocasió analitzarem tres nous tipus de dades: estructures o registres, textures i enumerats.
Mentre que en la taula totes les dades són del mateix tipus, en l'estructura o registre hi ha un conjunt de dades que no han de ser del mateix tipus. Les dades que componen l'estructura corresponen a una unitat o element, el tipus de dades més comuna que s'emmagatzema en el disc. En el fitxer de la biblioteca, per exemple, hi ha un registre (o estructura) de cada llibre, on hi ha codi, títol, escriptor, nombre de pàgines, etc. (dades de diferent tipus).
Atès que és impossible utilitzar un índex per a determinar una dada en l'estructura comparant-lo amb les taules, a cada dada o camp se li assigna un nom, per la qual cosa per a identificar una dada s'haurà d'especificar l'estructura i els noms del camp.
El llenguatge C utilitza la paraula clau i l'operador “struct” per a manejar estructures.
Igual que en altres tipus de dades, diferenciarem la definició i ús de les estructures, però en aquest cas la definició es realitzarà en dos passos, ja que mentre en el primer es defineix l'estructura abstracta amb els camps corresponents (definició de l'estructura), en el segon es definirà la (s) variable (s) d'aquest tipus.
En el programa 1 definim i utilitzem el registre del fitxer de la biblioteca.
Per tant, com es pot observar, els noms i tipus dels camps de la definició de l'estructura apareixen entre els diferents reis i}, struct i nom per davant i per darrere. En l'ús, per contra, una vegada definida inicialment la variable d'aquest tipus, s'especifica la variable de representació dels camps, l'operador • i el nom del camp.
Si existeixen dues variables de la mateixa mena d'estructura, l'assignació entre elles amb uns compiladors és possible per una sola assignació, mentre que amb uns altres s'ha de completar zonalment. No obstant això, en contra del que ocorria amb les taules, el nom d'una variable de tipus estructural indica el seu valor i no la seva referència. Per tant, en determinar una estructura com a paràmetre se li especificarà prèviament i el que s'intercanviarà serà el seu índex.
Es poden combinar estructures i demostradors. D'una banda, el component d'una estructura pot ser un demostrador i, per un altre, com ja s'ha comentat anteriorment, en l'estructura s'utilitzen demostratius, sobretot en les crides de funcions.
A tall d'exemple, pensem que per a escriure l'estructura anterior, la de la biblioteca, tenim una funció i com a paràmetre la referència de l'estructura del llibre. Aquesta funció es defineix en el programa 2 i en lloc d'utilitzar l'operador • s'utilitzarà l'operador Prèvia, ja que (* demostrador). el camp i el camp de demostradors són equivalents a C. En el primer programa se substituiria l'ordre printf per la següent anomenada:
print_lib_bat ( liburu)
La utilització de demostradors estructurals permet referenciar en una estructura una altra variable de la mateixa estructura. Això és molt utilitzat per a definir i utilitzar llistes, files, piles, etc.
En el programa 3 es presenta una estructura i una funció utilitzada per a definir l'arbre binari de strings. La funció escriu l'arbre d'esquerra a dreta utilitzant l'algorisme recursivo.
Els mateixos agents analitzats en les estructures de definició i ús dels embalatges (. Malgrat la utilització de - ), l'objectiu d'aquesta mena de dades és radicalment diferent, ja que encara que els camps descrits en tots dos poden ser de diferent tipus, en les recopilacions aquests camps són interpretacions diferents del tipus que correspon a un únic camp, mentre que en les estructures són components d'un conjunt. Per tant, en llegir una dada de tipus recopilació només es podrà utilitzar un dels camps definits en aquest. Encara que aquest tipus s'utilitza poc, el seu ús més estès es deu al fet que es gasta menys memòria per a tractar el llegit d'un fitxer com un tipus diferent de dades. Per exemple, en el programa 4 s'imprimeix un tros de memori de 80 bytes, però segons un codi són 80 caràcters o 20 nombres enters.
Com es veu en el programa, els embolcalls es poden combinar amb exhibidors i taulers. D'aquesta forma s'ha enviat l'índex d'una recollida a la funció i els camps de la recollida són taules. Els embolcalls també es poden combinar amb estructures, ja que és possible que dins d'una estructura hi hagi alguna, i viceversa, que hi hagi estructures dins de l'embolcall.
Aquest tipus de dades s'utilitza quan el valor possible d'una variable és un dels components d'un grup curt. El que es fa en aquest tipus es pot fer amb caràcters o nombres enters (assignant un codi a cada valor), però perquè el programa sigui llegible ocorre un tipus de dada molt apropiada. La definició de la llista es compon de la paraula clau enum, el nom del tipus i els possibles valors, separats per comes i entre claus.
En el programa 5 es pot veure la seva aplicació amb una funció que aplica una tarifa diferent segons el dia de la setmana:
Com vam dir en l'anterior, C no té capacitat per a definir nous tipus de dades, però alguna cosa semblança es pot fer amb la possibilitat de definir sinònims a través de l'operador typedef.
Amb aquest mètode els programes milloren la llegibilitat, però no es crea un nou tipus de dades real, ja que l'única conclusió és que en temps de compilació es tracta d'una mera traducció de strings
D'aquesta forma es pot definir el tipus de dades booleà com es pot observar en el Programa 6: