Ciao e bentornato. Continuiamo la nostra discussione sulle strutture
e parliamo di come sono correlate agli array.
Abbiamo parlato di come le strutture sono simili agli array e che è possibile memorizzare più
di un valore, ma sono diversi perché è possibile avere diversi tipi di dati
e raggrupparli in questo modo.
Ma puoi anche avere matrici di strutture simili.
Quindi hai visto quanto sia utile la struttura e che ti consente di raggruppare logicamente
elementi correlati insieme, l'abbiamo visto. Sappiamo come definire una struttura
con diversi elementi usando la parola chiave struct, usando un nome
di tag.
E sappiamo anche come creare una variabile di quel tipo.
Perché ciò che è essenzialmente una struttura è che è un nuovo tipo di dati che puoi usare.
E poi puoi accedere agli elementi di una struttura usando l'operatore di selezione dei membri.
Bene, cosa succede se si desidera creare più strutture all'interno
di un array. Ce la puoi fare.
Quindi, ad esempio, è solo necessario tenere traccia di una variabile invece di tre
per ogni data utilizzata dal programma, questo è il vantaggio di una struttura.
Se volessimo gestire 10 date diverse in un
programma, dovremmo tenere traccia solo di 10 variabili diverse invece di 30.
Perché ricorda, la struttura contiene tre variabili al suo interno.
10 per variabili diverse è ancora abbastanza, quindi non è
davvero il modo ottimale per andare. Probabilmente vorresti creare un array.
Perché avresti 10 tipi uguali proprio come avresti 10
int uguali. Ci sarebbe solo un tipo di struttura.
Quindi un metodo migliore per gestire le 10
diverse date implica la combinazione di due potenti funzionalità del linguaggio di programmazione c,
strutture e array.
Puoi usarli insieme per renderlo ancora più potente.
Quindi è perfettamente valido definire un array di strutture
Il concetto di array di strutture è molto potente e importante in c, quindi fai molta attenzione.
Dichiarare un array di strutture è proprio come dichiarare qualsiasi altro tipo di array.
Specifichi il tipo, così accade che sia un tipo di struttura.
Quindi, se vuoi creare un array di strutture che
si chiamano date, dovresti dire
struct date e poi il nome della variabile e poi usi
le parentesi, proprio come usi le parentesi per altri array, devi specificare la dimensione.
Quindi, in questo caso, se stiamo creando 10 istanze o 10 elementi del tipo di
struttura della data, diremmo 10 all'interno di quelle parentesi per il segno.
Quindi questo definirebbe un array chiamato le mie date, che consiste di 10 elementi.
Ogni elemento all'interno dell'array è definito come una data struct di
tipo bf, che contiene tre membri.
Quindi essenzialmente quello che stai facendo è memorizzare 30
diversi set di dati, 30 diversi elementi di dati.
Per identificare i membri di una matrice di
strutture, si applica la stessa regola utilizzata per le singole strutture.
File il nome della struttura con l'operatore punto e poi con il nome del membro.
Fare riferimento a un particolare elemento della struttura all'interno dell'array è abbastanza naturale.
Per impostare la seconda data all'interno dell'array le mie date sull'8 agosto 1986, tutto ciò
che devi fare è specificare il nome dell'array, le
mie date e specificare l'indice. Stiamo specificando qui la seconda data.
Ricorda, gli array sono basati su 0. Quindi diciamo 1, sub-1.
E poi se vogliamo accedere agli elementi di quell'elemento
dell'array o ai membri di quella struttura per quell'elemento, diciamo punto mese.
Quindi questo ci darà il secondo elemento nell'array delle mie date.
Il valore del mese per quel tipo di struttura, e qui gli assegneremo il valore di 8.
e poi se vogliamo accedere al giorno, assegneremo anche il
giorno 8 perché è l'8 agosto. E poi finalmente, per l'anno, potremmo dire
anno punto uguale al 1986.
In questo modo puoi assegnare al secondo elemento dell'array le mie date,
le tre diverse variabili perché è di tipo struct, date struct.
Dovresti notare che in realtà non è diverso.
L'unica differenza qui è che hai un punto. Normalmente, diresti semplicemente le mie date
sotto 1 e sarebbe perché potresti assegnare solo una variabile a seconda
del tipo di quell'array.
Ma in questo caso, puoi dire sub-1 con tre variabili diverse perché
questi sono i tre elementi all'interno della struttura.
Inizializzazione di una serie di strutture.
L'inizializzazione di array contenenti strutture è simile all'inizializzazione
di array multidimensionali.
Ricorda, con gli array multidimensionali seguiremmo la sintassi specifica
con le parentesi graffe all'esterno e poi le parentesi graffe all'interno che rappresentano ciascuna riga.
Le parentesi graffe all'interno erano in realtà opzionali,
ma lo rendevano molto più leggibile. E quindi mi piace seguire quella convenzione.
In questo esempio, stiamo creando una mia data di tipo struttura data,
sarà di dimensione 5. Quindi inizializzeremo solo i primi tre elementi.
Proprio come un array multidimensionale, abbiamo quelle
parentesi graffe all'interno. E quindi il primo elemento nell'array di mie
date che è un indice sotto zero. Diremo che il mese
è 12, la data è 10 e l'anno è 1975.
E poi faremo lo stesso per il primo elemento. Diremo 12 30 1980.
E per il terzo elemento diremo 11 15 2005.
E poiché non abbiamo fornito gli altri due
elementi nell'array delle mie date, non verranno inizializzati nulla.
Quindi questo stabilirà le prime tre date.
Nell'array la mia data al 12 10
1975, 12 30 1980 e 11 15 2005.
I periodi interni delle parentesi graffe sono opzionali, proprio come in un'area multidimensionale sono anch'essi opzionali.
Ma ancora una volta rende più facile leggere, più facile da seguire con quelle parentesi
graffe interne, seguirei quella convenzione.
Quindi potresti farlo se vuoi sbarazzarti
delle parentesi graffe, ma è un po 'più difficile da
seguire perché ora hai solo virgole, separate da virgole o elementi separati da virgole
e può diventare molto confuso se stai facendo molto di quelli.
Devi mapparlo correttamente, diciamo che sono nel quarto quarto elemento per
la mia quarta virgola, va bene che sarà il
secondo elemento dell'array, è più difficile da seguire, quindi usa quelle all'interno delle parentesi graffe.
Se vuoi inizializzare solo il terzo elemento dell'array su un valore
specificato, puoi specificare le mie date sotto-5.
Stai ancora creando l'array qui.
Stai ancora dichiarando la variabile e impostando la dimensione su cinque.
Ma all'interno delle parentesi graffe,
stai dicendo due tra parentesi e stai
per inizializzare da 2 a 12 10 1975.
Quindi vedrai le parentesi quadre che rappresentano l'elemento che desideri inizializzare, quindi
l'operatore di assegnazione è uguale e quindi all'interno delle parentesi graffe
stai inizializzando il mese, il giorno e l'anno per gli
elementi all'interno della struttura.
Quindi puoi anche specificare esattamente quale elemento vuoi inizializzare.
Se vuoi impostare solo il mese e il giorno del secondo elemento dell'array delle mie date su 12 e 30,
puoi fare qualcosa di molto simile.
Basta fare una virgola per separare ogni attributo.
Non vuoi impostare effettivamente l'anno, quindi vuoi essere in grado di usare quelle parentesi graffe.
Potresti dire che il mese in punti equivale
a 12 meno di 1 giorno in punti equivale a 30.
E ancora una volta questa sintassi sembra molto simile all'inizializzazione
delle variabili struct altrove.
L'unica differenza qui è che si tratta di un array, devi specificare l'indice
dell'array, ma sintassi simile.
E le strutture contenenti array.
Elementi all'interno della struttura che contengono un array.
È anche possibile trovare strutture che contengono un array come membro.
Potrebbe essere utile.
È l'uso più comune per impostare un array di caratteri all'interno di una struttura.
Usiamo array di caratteri abbastanza giusti per le stringhe.
Quindi sarebbe molto comune per una struttura contenere essenzialmente una stringa, un
array di caratteri.
Supponiamo quindi di voler definire una struttura
chiamata mese che contenga come membri, il numero di giorni nel
mese e un'abbreviazione di tre caratteri per il nome del mese.
Bene, è lì che potremmo usare un array di caratteri. Potremmo dire struct month.
Sappiamo come definire una struttura. Ancora una volta, questo non sta allocando alcuna memoria.
Ecco come viene definita la struttura. Questi sono gli elementi che sono contenuti al suo interno.
Qui stiamo usando la parola chiave struct. Diciamo il nome della struttura. Il nome del tag è mese,
quindi abbiamo quella parentesi graffa sinistra e quindi specifichiamo gli elementi.
Abbiamo un elemento che è intero rappresenta il numero di giorni in cui abbiamo un punto e virgola alla fine.
E poi abbiamo un array di caratteri, nome del
carattere sub-tre, quindi dimensione di tre perché ha tre caratteri.
E poi terminiamo la struttura con la parentesi graffa destra nel punto e virgola.
Ma ricorda, i caratteri sono array e sono strettamente correlati ai puntatori e ormai lo sappiamo.
Ma puoi facilmente fare in modo che le strutture contengano array semplicemente
inserendole come elemento membro.
E così questo imposta una struttura mensile che contiene
un membro intero chiamato numero di giorni e un membro carattere chiamato nome chiamato.
Il nome del membro è in realtà un array di tre caratteri, piuttosto semplice.
Quindi come accedervi effettivamente. Bene, prima dovresti creare la tua variabile.
La variabile creerebbe memoria per gli elementi all'interno della struttura e quindi dovresti semplicemente impostare
i campi corretti all'interno della variabile di 8 mesi, l'array di caratteri perché
quello era il nome di esso. Avevamo nome e numero
di giorni. Qui si chiama nome e l'esempio si chiama mese.
Bene, un mese è il tipo di variabile e quindi il nome è il tipo di elemento, quindi è corretto.
Quindi qui creiamo una struttura. È di tipo mese.
Il nome della variabile è un mese. Non lo inizializziamo con niente.
Abbiamo immediatamente impostato un numero di giorni al mese di 31.
Usiamo quell'operatore di selezione dei membri del punto.
E poi vogliamo assegnare all'array di caratteri, non possiamo
assegnare direttamente a un array di caratteri.
Dovresti fare un confronto str o qualcosa del genere se vuoi firmare tutto. E potresti farlo.
Non devi usare questi indici. Potresti dire str copia
una virgola del nome del punto del mese e
poi j an tra virgolette doppie oppure puoi farlo in questo modo quando
accedi agli elementi dell'array tramite l'indice.
Qui stiamo dicendo un nome punto del mese perché dobbiamo accedere
alla variabile membro nome o all'elemento membro.
E poi tra parentesi, specifichiamo l'indice dell'array.
Lo troveremo firmando il primo carattere nell'array di j, il secondo a, il terzo n.
Vedresti questa sintassi se stessi eseguendo interi,
doppi e float. Normalmente, quando hai un
array di caratteri, userai la funzione str stir copy e assegnerai tutto con virgolette doppie.
Puoi anche inizializzare la variabile sugli stessi valori facendo qualcosa
di molto simile quando dichiari la variabile. Appena dentro le parentesi graffe,
poiché è un array, puoi avere all'interno le
parentesi graffe interne e poi le virgolette singole attorno a ciascun carattere.
E puoi impostare strutture di 12 mesi all'interno di un array per rappresentare ogni mese dell'anno.
Quindi ora possiamo creare la
variabile di un mese, che è un array di dimensione 12 di tipo struct month,
e che può rappresentare ogni mese.
E poi per ogni mese, possiamo spendere il numero di giorni e poi le abbreviazioni per il mese.
Quindi utilizzare questi due potenti concetti di array
e strutture è molto, molto utile.
Le strutture possono avere molti elementi,
quindi possono effettivamente essere una struttura di array e gli elementi
all'interno della struttura possono essere un array.
Poi parleremo di come possiamo usare le strutture per contenere altri elementi come i puntatori.
Ma vedrai che le strutture possono memorizzare qualsiasi tipo di dati
in molti diversi tipi di dati.
Ed è molto, molto utile da usare con il concetto di array.
Spero che questo sia stato utile. Ancora una volta, avremo una sfida per
dimostrare alcuni di questi concetti e portare in seguito alcuni
esempi all'interno dei blocchi di codice. Grazie.