Ciao e Benvenuto. Siamo in una nuova sezione.
Parleremo di strutture.
Questo è un nuovo concetto in c che ti
consente di raggruppare elementi insieme, simili all'array ma più potenti.
Voglio parlare di cos'è una struttura, come puoi creare e come
puoi usare una struttura.
Quindi le strutture in c forniscono un altro strumento per raggruppare gli elementi insieme.
Ancora una volta, ho detto che sono simili a un array, ma in realtà sono un po 'più potenti.
Se hai familiarità con la
programmazione orientata agli oggetti, se programmi in java
o c-plus o qualsiasi linguaggio orientato agli oggetti, è un po
'pensato come un oggetto ma solo con membri dati, nessun comportamento reale, nessun metodo.
Quindi è un concetto
potente che utilizzerai in molti programmi c che
sviluppi perché puoi raggruppare insieme diversi elementi in un
unico nome e questi possono rappresentare essenzialmente attributi di dati.
Quindi, ad esempio, supponi di voler memorizzare una data all'interno di un programma.
Una data di solito è composta da tre variabili: mese, giorno e anno.
Dovresti creare queste tre variabili per memorizzare quei dati.
Ad esempio, diresti che int mese è uguale a 9 giorni è uguale a 25 anni
è uguale a 2015.
Supponiamo che il tuo programma debba memorizzare anche la data di acquisto di un particolare articolo.
Bene, probabilmente dovresti creare altre tre variabili per ogni data
che usi nel tuo programma. Quindi puoi vedere come questo
può diventare molto ripetitivo e finisci per creare molte variabili.
Ma quello che dovresti notare è che queste variabili sono logicamente correlate. Sono tutti appuntamenti.
Dovrebbero davvero essere raggruppati insieme.
Dovrebbero essere quasi il loro tipo di dati e quindi dovresti essere in grado di
crearli e accedere ai diversi elementi.
Non dovresti creare tre variabili separate per ogni singola data.
Quindi, ancora una volta, è qui che entra in relazione con gli
oggetti e una classe che ha tre attributi di dati.
Quindi sarebbe molto meglio se potessi in qualche modo raggruppare questi insiemi di tre variabili insieme.
E questo è esattamente ciò che fa l'elemento struttura e c.
Ti consente di raggruppare questi diversi elementi insieme a un nome particolare.
È quindi possibile creare diverse variabili con quel nome
e accedere agli elementi in quel
nome, i diversi attributi dei dati, in realtà sono chiamati membri.
Allora come si crea una struttura in c.
È molto molto semplice. La dichiarazione della struttura descrive come viene assemblata una struttura.
Quali elementi ci sono all'interno della struttura.
E di solito ci riferiamo a questi elementi come membri.
Poiché devi prima definire la struttura o dichiarare la struttura,
descrivi cosa c'è all'interno della struttura.
E così puoi farlo con la parola chiave struct.
La parola chiave struct consente di definire una raccolta
di variabili di vari tipi denominate struttura che è possibile trattare come una singola unità.
Molto, molto potente.
Quindi, usando questa parola chiave struct, tutto ciò che devi fare è fornire un nome,
e questo è solitamente indicato come il nome del tag. In questo esempio, abbiamo un nome di tag di data.
Ma vedi la parola chiave struct, questa è la parola chiave che dice
al compilatore c che questa sarà una funzione specifica.
Questo può avere funzionalità specifiche che ti consentono di raggruppare elementi.
Quindi struct è la parola chiave seguita dal nome del
tag e poi hai la parentesi graffa sinistra e
la parentesi graffa destra seguite da un punto e virgola per terminare.
E poi lì dentro, puoi definire qualsiasi tipo di variabile desideri, puoi persino inserire dei puntatori lì dentro.
E quelli sono chiamati i membri della struttura.
Quindi questa è di nuovo un'istruzione che definisce una struttura della
data che il compilatore c comprenderà.
Dice al compilatore c cosa conterrà la struttura dello
stato, tre elementi: mese,
giorno e anno. Non c'è allocazione di memoria per questa dichiarazione.
Di nuovo, quello che stai dicendo è che questa è una struttura che esiste.
Non ho ancora iniziato a usarlo. Ho appena detto che è così che verrà definito.
Questa sarà la struttura della data e questo è ciò in cui consiste.
I nomi delle variabili all'interno della struttura della data, il mese, il
giorno e l'anno, sono chiamati membri o campi.
I membri della struttura vengono visualizzati tra le parentesi graffe
che seguono la data del nome del tag della struttura, quindi la data del nome del tag.
Sintassi molto, molto semplice per raggruppare questi elementi insieme all'interno di un unico nome che è la data.
E noti che è diverso da un array perché non
ci sono indici, in realtà non stai specificando una dimensione.
Non è esattamente lo stesso tipo di dati.
Puoi avere diversi tipi di dati e puoi averne molti diversi.
Quindi come useresti questa struttura.
Ebbene, la definizione di data definisce un nuovo tipo nella lingua.
Puoi davvero pensarlo come un altro tipo proprio come un int, un double o un float.
Tranne questo tipo che hai definito, puoi quasi pensarlo come un enum.
Tranne che un enum contiene solo un valore.
Questa struttura della data può contenere tre valori ma è un altro tipo di dati.
Le variabili possono ora essere dichiarate di tipo struct fino ad oggi.
Quindi è esattamente quello che faresti.
Potresti creare una nuova variabile chiamata oggi e
sarà un tipo di tipo struct date.
E oggi sarà essenzialmente in grado di contenere tre valori.
E poi se hai bisogno di dichiarare
più date, puoi creare più variabili dello stesso tipo.
E quindi non è più necessario avere tre variabili separate per una data di
acquisto, tre variabili separate per la
data corrente, tre variabili separate per una data di fatturazione.
Puoi avere una o
due variabili di istanze diverse di quella struttura effettiva.
Di nuovo, si spera che tu possa notare quanto potente possa essere.
Quindi questa affermazione sopra deve essere di tipo data struttura, data
di acquisto.
La memoria è ora allocata perché hai dichiarato che la variabile
Memoria è allocata per questa struttura.
La memoria viene allocata per i tre valori interi o per i tre
membri di ciascuna variabile, in
modo che venga allocata la memoria.
E anche il motivo per cui verrà assegnato è perché non ci sono indicazioni.
Se ci fossero puntatori in quella struttura, dovresti allocare memoria per quel puntatore.
Ma poiché questa struttura della data odierna è una struttura molto
semplice, sto iniziando lentamente, contiene tre int, quei membri vengono assegnati automaticamente per te.
Ma assicurati di comprendere questa distinzione dalla diapositiva precedente e da questa diapositiva corrente.
C'è una differenza tra la definizione di una struttura e la dichiarazione delle variabili
di quel particolare tipo di struttura.
Di nuovo, la struttura finanziaria sta solo dicendo al compilatore c che c'è una
struttura e questo - questi sono i dati che sono al suo interno.
Ma in realtà dichiarare una variabile di quel particolare tipo di
struttura significa che inizierò a usare quella struttura.
Ora ho memoria allocata per i tre elementi nel nostro esempio
e posso accedere a quegli elementi e impostarli.
Quindi come si accede ai membri in una struttura?
Quindi ora che sai come definire una struttura e
ora sai come dichiarare le variabili di struttura,
ora devi essere in grado di capire come fare riferimento a quei membri di struct.
Devi accedervi. Se non potessi accedervi per vedere i valori o impostare i valori, sarebbe inutile.
Quindi il nome di una variabile di struttura non è un puntatore.
Quindi è necessaria una sintassi speciale per accedere ai membri.
Perché i puntatori di solito contengono solo il valore di
un indirizzo.
E se non è un puntatore, avrai bisogno di una sintassi speciale.
È possibile fare riferimento a un membro di una struttura scrivendo il nome della variabile seguito da un punto.
Di solito è chiamato come l'operatore punto.
E poi dopo quel punto dell'operatore
punto, segui il nome della variabile membro all'interno di quella struttura.
Il periodo tra il nome della variabile
di struttura e il nome del membro è chiamato operatore di
selezione dei membri, noto anche come operatore punto.
Non sono consentiti spazi tra il nome della variabile, il periodo e il nome del membro.
Per impostare il valore del giorno nella variabile oggi su 25,
farei semplicemente qualcosa del genere. Il nome della variabile che
è oggi, e poi direi punto, senza spazi tra entrambi i lati.
E poi vorrei specificare il nome dell'elemento all'interno della definizione della struttura,
che è giorno.
E poi lo assegnerei proprio come assegno qualsiasi altro numero intero.
Userei l'operatore di assegnazione uguale,
qui una costante letterale e il punto e virgola.
Molto, molto semplice. Se voglio
assegnare l'anno, direi oggi. anno e direi uguale 2015 per esempio.
E quando voglio accedere ai valori dei membri.
Ad esempio, se volessi accedere al valore del membro del mese per vedere se è uguale a
12, utilizzerei comunque la sintassi del punto, l'operatore di selezione dei membri.
Quindi è possibile utilizzare l'operatore di selezione dei membri per accedere ai valori dei membri.
E quando accedi a
queste variabili membro, puoi usarle proprio come usi le altre variabili.
Puoi usarli nelle operazioni aritmetiche se sono int.
Dovresti seguire le regole di quel tipo di dati.
Quindi, in questo caso, possiamo effettivamente confrontarlo in 12 semplicemente
usando gli uguali uguali all'interno di un'istruzione if.
E poi, ad esempio, se fosse uguale a 12, potremmo dire che il mese successivo è uguale a 1.
Potrebbe essere una variabile locale che assegneremo.
Quindi diamo un'occhiata a un esempio. Qui stiamo definendo una struttura chiamata date.
Abbiamo tre elementi, numeri interi: mese, giorno e anno.
Sappiamo che lo stiamo definendo perché abbiamo la parola chiave struct e abbiamo quelle parentesi graffe.
E poi nota anche che la parentesi graffa destra ha un punto e virgola per terminare la definizione.
A questo punto, nessuna memoria è allocata per questa struttura.
Nella riga successiva, dichiariamo effettivamente una variabile di quel tipo,
quindi ora stiamo allocando memoria per un nome di variabile che
contiene essenzialmente tre elementi: mese, giorno e anno di tipo int.
Possiamo assegnare dati a quei tre elementi all'interno di quella struttura
oggi semplicemente usando l'accesso a quel punto membro.
Quindi oggi. il mese è uguale a nove, oggi. giorno è uguale a 25 e oggi. anno 2015.
Se poi volessimo stamparlo o accedere a quei dati, potremmo accedervi nello stesso modo
dopo averlo assegnato. Useremmo solo quella selezione di membri: oggi. mese, oggi. giorno
per giorno. anno. E ancora, possiamo eseguire operazioni aritmetiche su di esso perché è un int.
Useremmo la percentuale d oppure, se volessimo formattarla su 2,
potremmo dire la percentuale 2I o la percentuale 2D.
Quindi questa è una sintassi piuttosto semplice,
molto facile da creare e definire strutture e quindi utilizzarle e
quindi accedervi utilizzando l'operatore di selezione dei membri del punto.
Che ne dici di strutture ed espressioni?
Bene, hai appena visto che sono stato in grado di accedere ai dati e utilizzare un'espressione aritmetica
e non è diverso.
Quando si tratta della valutazione dell'espressione,
i membri della struttura seguono le stesse regole delle variabili ordinarie.
Se hai membri all'interno di quella struttura che sono interi, puoi fare
le stesse regole di qualsiasi altro intero.
Puoi applicare addizioni, sottrazioni e così via. Se si tratta di un buffer di caratteri, puoi
eseguire solo le regole dei buffer di caratteri. Puoi aggiungere e meno buffer di caratteri,
cose del genere, di solito no.
Quindi float, double, tutti i diversi tipi
di dati, seguiresti semplicemente le stesse regole quando usi quei membri all'interno delle espressioni.
Quindi ecco un esempio.
Dico oggi. anni divisi per cento più uno.
Perfettamente valido perché year è un int,
non diverso dall'uso di una variabile regolare di tipo int.
È sufficiente accedervi in modo diverso utilizzando l'operatore di selezione dei membri.
Ora ci sono varianti. Esistono diversi modi per definire le strutture.
L'unica cosa fantastica di c è la sua flessibilità ec ti
consente di definire una struttura in molti modi diversi. Quindi potresti vedere una
sintassi diversa quando definisci una struttura.
Il primo esempio che ti ho mostrato è davvero quello che dovresti seguire. Dovresti sempre avere un nome di
tag, e dovresti definire la struttura in un punto del tuo codice e poi dichiararne
le variabili in un altro. Ma essendo così
com'è, è molto flessibile. Puoi effettivamente definire strutture e dichiarare variabili nella stessa riga.
E puoi anche definire strutture anonime o nessuna struttura con nome.
Quindi c'è molta flessibilità. È valido dichiarare una variabile come
parte di una particolare struttura nello stesso momento in cui stai effettivamente definendo la struttura.
Puoi mettere il nome della variabile in fondo. Ti mostrerò come farlo.
Includere il nome oi nomi delle variabili prima del punto e virgola finale della definizione della struttura.
E puoi anche assegnare e inizializzare i valori a quelle variabili nel modo
normale in cui assegni qualsiasi variabile. Quindi diamo un'occhiata a quello.
Una variazione della definizione di una struttura facendola nello stesso momento in cui la
definisci puoi dichiarare una variabile. Quindi, in questo caso, abbiamo
definito la nostra data struct, ma abbiamo anche creato una variabile chiamata today.
Perché alla fine della parentesi graffa destra questo è il nome prima del punto e virgola,
che sta facendo sia la creazione della variabile di tipo date struct che la definizione della struct date.
Quindi in questo esempio sopra, stai creando
una variabile della struttura.
Ci riferiamo a quello anche come istanza della struttura. Si chiama oggi.
Si dichiara contestualmente alla definizione della struttura.
Quindi oggi è una variabile di tipo data, abbiamo fatto tutto in uno.
E potresti effettivamente subito dopo aver fatto
l'oggi, potresti effettivamente inizializzare quelle variabili usando le parentesi
e poi dire che
il mese è uguale a cinque, il giorno è uguale e così
via, proprio come inizializzi qualsiasi altro numero intero.
Ora di nuovo un altro modo in cui potresti creare una struttura è
che potresti creare una struttura senza nome. Questo è un po 'più limitato
perché non puoi farci molto.
Ma non è necessario fornire effettivamente un nome di tag.
Ricorda, il nome del tag è in alto, subito dopo la parola chiave struct.
Negli esempi precedenti, il nome del tag era data.
Ma non devi fornire quella data.
Se tutte le variabili di un particolare tipo di struttura sono definite quando la struttura è
definita, il nome può essere omesso.
E ciò che questo significa veramente è che utilizzerai la struttura solo
una volta e solo una volta.
Quindi potremmo semplicemente dire struct
int day, int year, int month e quindi
dichiarare la variabile nella stessa cosa.
Ma noterai che non c'è alcun nome di tag dopo la parola chiave struct.
Questa è solo una struttura. Useremo una volta, quindi
creiamo la variabile oggi e poi non la useremo mai più.
E questo è davvero lo svantaggio e la limitazione.
Non vuoi davvero farlo a meno che tu non abbia una sorta di struttura locale che usi una volta.
Ma non puoi definire ulteriori istanze di questo se definisci la
struttura in questo modo come
una struttura senza nome, una struttura senza nome.
Tutte le variabili di questo tipo di struttura che vuoi che il tuo programma sia definito in un'unica istruzione.
Potresti creare più di una variabile, potresti fare la virgola di oggi e
poi un'altra variabile in modo da poter creare più variabili.
È possibile inizializzare più variabili.
Ma in questo modo è un po 'limitato perché dopo
quella dichiarazione di variabile in basso, non puoi creare altre variabili.
Quindi ci sono tre modi per definire strutture diverse.
Un modo è definire la struttura con un nome di
tag e non creare la variabile. La variabile viene creata in un'istanza separata quando viene allocata la memoria.
Un altro modo è creare la variabile e la
struttura e allo stesso tempo dove avresti un nome
di tag e questo ti permetterebbe
di creare altre istanze o altre variabili di quel tipo di struttura più avanti
nel tuo programma o questa terza opzione in cui potresti creare una
struttura senza nome senza
nome e solo la variabile in fondo. E ancora, puoi inizializzare tutti questi ogni
volta che crei le variabili usando solo le parentesi graffe e così via.
Quindi ora inizializzazione delle strutture.
L'inizializzazione delle strutture è molto simile all'inizializzazione degli array.
Gli elementi sono elencati all'interno di una coppia di parentesi
graffe con ogni elemento separato da una virgola.
Nessuna nuova roba da imparare qui davvero.
I valori iniziali elencati all'interno delle parentesi graffe devono essere espressioni costanti. Non
è possibile utilizzare variabili, è simile a un array.
Qui stiamo creando una variabile today di tipo struct
date, e stiamo dicendo che il primo membro è uguale a
sette, il secondo è due e il terzo è 2015, che corrisponde al giorno
del mese dell'anno perché questo è l'ordine di
come sono stati definiti nella struttura.
Quindi, proprio come l'inizializzazione di un
array, potrebbero essere elencati meno valori di quelli contenuti nella struttura.
Non è necessario fornirli tutti e tre, si potrebbero
fornire solo due e ciò inizializzerebbe il mese e il
giorno e non inizializzerebbe l'anno.
Quindi questo fisserebbe la data. uno. mese fino
a 12 data 1. giorno a 10, ma non fornisce alcun valore iniziale fino ad oggi. anno.
È inoltre possibile specificare i nomi dei membri nell'elenco di inizializzazione in questo modo
non è necessario disporre di alcun ordine.
Puoi metterli in qualsiasi ordine tu voglia e non sei dipendente da quello.
Quindi potresti fare qualcosa di simile. membro è uguale a
valore e data struttura, data uno. Potresti dire che il mese puntato è uguale a 12.
Quindi la sintassi iniziale di questo è impostare il membro all'interno delle parentesi
graffe con il punto e quindi assegnare semplicemente il valore, il mese del punto è uguale a
12 virgola La data del punto è uguale a 10.
Hai bisogno di quel punto. Quel punto è importante, quindi non dimenticarti di quel punto.
Non hai bisogno dell'istanza prima del punto.
Quindi questo imposterà il membro dell'anno della variabile della
struttura della data oggi al 2015 in
questo prossimo esempio.
Quindi qui diciamo solo perché ricorda che puoi omettere
alcune delle altre variabili membro. E in questo caso, stiamo
ammettendo il mese del giorno, quindi imposteremo l'anno al 2015.
Nel caso precedente abbiamo effettivamente omesso l'anno e
impostato il mese e la data rispettivamente su 12 e 10.
Possiamo anche eseguire assegnazioni con letterali composti.
Ebbene, che cos'è esattamente è un letterale composto.
È possibile assegnare uno o più valori a una struttura in una singola
istruzione utilizzando ciò che è noto come letterale composto.
Credo che questo potrebbe essere solo in C11.
Ma qui abbiamo
oggi, supponiamo di aver creato una variabile struct date
today, e quindi stiamo effettivamente inserendo tra parentesi struct date.
E all'interno delle parentesi graffe, stiamo dicendo 9 virgola 25 virgola 2015.
E questo è un letterale composto.
Questa affermazione può apparire ovunque nel programma.
Quindi, invece di inizializzare o assegnare effettivamente valori usando il membro
punto, puoi metterlo ovunque nel programma dopo aver effettivamente inizializzato
la struttura odierna. Non è una dichiarazione di dichiarazione.
Questa è un'assegnazione letterale composta.
L'operatore typecast viene utilizzato per indicare al compilatore il tipo di espressione.
Quindi hai bisogno di quelle cose tra parentesi che sono una data di cast, struttura.
L'elenco dei valori segue il
cast e devono essere assegnati ai membri della struttura in quell'ordine, dipende dall'ordine.
Quindi è elencato nello stesso modo in cui si inizializza una variabile di struttura.
Ancora una volta, il vantaggio di
ciò è che non è necessario assegnare ogni variabile membro individualmente su righe separate.
Puoi fare tutto in una riga e dire okay questo è il nuovo valore
per questa variabile oggi.
Puoi anche specificare i valori usando la notazione del membro punto come ho detto.
Dovresti solo farlo in una riga come questa
o su righe separate. E in questo modo, sembra quasi l'inizializzazione, ma
stai ancora facendo i letterali composti.
Il vantaggio dell'utilizzo di questo approccio è che gli argomenti possono apparire in qualsiasi
ordine, quindi proprio come in precedenza.
Ancora una volta, la chiave e la differenza di queste assegnazioni è
che non sta accadendo nell'inizializzazione che stai
facendo da qualche altra parte nel programma per assegnare nuovi valori a quel tipo.
Quindi molte buone informazioni in questa conferenza.
Abbiamo parlato delle strutture e di quanto siano potenti e di come possiamo
raggruppare elementi diversi o variabili diverse in un unico nome.
Definiamo quella struttura. Esistono vari modi per definire una struttura.
E poi dobbiamo anche dichiarare una variabile.
Una volta che abbiamo quella variabile, possiamo accedere
e assegnare i dati a quella struttura utilizzando l'operatore di selezione dei membri del punto.
E poi discuteremo anche alcune delle diverse notazioni
e diversi modi di fare le cose così come l'inizializzazione.
Useremo abbastanza le strutture.
Avrò un paio di sfide che ti aiuteranno a familiarizzare con questa sintassi.
Ma questo è solo l'inizio della struttura. Dobbiamo anche parlare
di strutture annidate, di come puoi usare puntatori e
strutture e cose del genere.
Quindi buona fortuna, questa sarà una sezione divertente ed eccitante. Grazie.