Nella lezione di oggi vedremo insieme cosa sono le variabili e quanti e quali tipi di variabili sono supportati dal C.
Con il termine "variabile" si intende un contenitore, di una certa dimensione, atto a contenere un qualcosa che può essere modificato nel tempo. Una variabile può essere vista, quindi, come una scatola in cui il programmatore inserisce le informazioni che gli possono servire nello svolgimento del programma. Come vedremo l'utilizzo di queste "scatole" può avvenire in diversi modi, quindi oltre che introdurre informazioni, è possibile guardare dentro la scatola per vedere cosa contiene, è possibile estrarre le informazioni per usarle, ed è possibile, in qualsiasi momento, cambiare il contenuto della scatola con nuove informazioni, buttando quelle che non servono più.
Ogni scatola, deve essere grande abbastanza per contenere l'informazione che si vuole inserire. Non è possibile avere scatole piccole se ciò che vogliamo inserire all'interno è più grande della scatola stessa (anche se vedremo che in C, a differenza di linguaggi a più alto livello, questo è possibile, anche se c'è una "penale" da pagare). Per questo motivo esistono in C diversi tipi di scatole, vale a dire diverse dimensioni che si possono dare alla scatola che si vuole utilizzare. I tipi definiti in C sono in totale 7 ed ognuno ha una grandezza diversa e serve per memorizzare al suo interno un certo tipo di dato.
Lasciando ora da parte l'esempio fatto sulle scatole che serviva a dare un'idea di cosa siano le variabili (soprattutto per coloro che non hanno mai programmato) diamo la definizione formale di variabile: una variabile è una locazione di memoria della grandezza pari al tipo utilizzato in fase di definizione, atta a contenere un informazione espressa in formato binario, occupante l'intera locazione.
Prima di procedere con la spiegazione, va detto che cosa si intende per locazione di memoria. Quando il programma va in esecuzione il sistema operativo riserva al programma stesso una certa zona di memoria. Questa zona viene suddivisa ulteriormente in più porzioni ove ogni porzione ha uno specifico compito. Tutte le variabili che vengono create ed utilizzate nel corso del programma risiedono nella porzione chiamata "Data Segment". Questa porzione di memoria viene dimensionata in maniera tale da contenere tutte le variabili create, ed ogni variabile è rappresentata in questa zona da uno o più byte a seconda del tipo con cui è stata dichiarata. In pratica il Data segment è un grosso contenitore che contiene tutte le scatoline che rappresentano le variabili.
Come detto prima i tipi in C sono in totale 7. Vediamo insieme quali sono e quanta memoria occupa ogni tipo:
[LIST]char : occupa 1 byte. Viene utilizzato solitamente per memorizzare singoli caratteri. E' possibile anche memorizzare all'interno valori numerici che vanno da -128 a +127 nel caso di valori con segno e da 0 a 255 nel caso di valori senza segno[/LIST][LIST]short : occupa 2 byte. Utilizzato per memorizzare valori numerici non troppo elevati. Il suo range va da -32768 a 32767 nel caso di valori con segno, oppure da 0 a 65535 nel caso di valori senza segno[/LIST][LIST]int : Questo è un tipo un po' particolare. A seconda del processore e del tipo di compilatore usato può misurare 2 oppure 4 byte. Nel primo caso può memorizzare numeri interi come per lo short, mentre nel caso di 4 byte può arrivare a memorizzare numeri interi che vanno da -2147483647 a +2147483647 nel caso di valori con segno e da 0 a 4294967295 nel caso di valori senza segno.[/LIST][LIST]long : occupa 4 byte. Utilizzato per memorizzare numeri interi molto grandi. Il suo range è identico al tipo int rappresentato con 4 byte[/LIST][LIST]float: occupa 4 byte. Viene utilizzato per memorizzare valori in virgola mobile. Senza addentrarci nella spiegazione di cosa si intende per "virgola mobile" possiamo dire che tali valori rappresentano numeri con virgola (ad esempio 3,45 opppure 1250,43)[/LIST][LIST]double: occupa 8 byte. Viene anch'esso utilizzato per memorizzare valori in virgola mobile[/LIST][LIST]bool: occupa un solo byte.Viene utilizzato per esprimere valori di vero o falso. Di solito alle variabili di questo tipo può essere assegnato il valore esprimendolo tramite la clausola "true" oppure "false". In realtà in C ogni valore numerico uguale a 0 (zero) viene trattato come false mentre tutti i valori diversi da zero sono trattati come true[/LIST]
C'è da aggiungere che i moderni compilatori possiedono anche un ulteriore tipo chiamato "long long" che serve per rappresentare valori numerici interi da 8 byte.
Nella spiegazione dei tipi si è parlato di valori con segno e senza segno. Questo perchè ogni valore all'interno del PC viene rappresentato in forma binaria, utilizzando una serie di 1 e di 0. Ogni valore di questo tipo è chiamato bit, ed un insieme di 8 bit formano un byte. Per rappresentare la positività o la negatività di un numero viene utilizzato il bit più significativo che funge, praticamente, da segno + oppure da segno -. In questo modo, ad esempio, un valore char con segno (rappresentato in memoria da 1 byte quindi 8 bit) avrà a disposizione solamente 7 bit per il valore. Nel caso di valori senza segno, la macchina virtuale C utilizza tutti i bit per rappresentare il valore, quindi in quest'ultimo caso non è possibile avere valori negativi.
Se siete interessati ad un approfondimento riguardo la numerazione binaria scrivetemi pure nel forum ed io vi accontenterò (non mi metto a scrivere se tanto non interessa a nessuno! )
La sintassi per dichiarare una variabile è la seguente:
<tipo> <nome variabile>
Il tipo è uno dei sette identificatori specificato sopra mentre il nome è una sequenza di caratteri scelta a piacere dal programmatore. Se volessimo dichiarare una variabile di nome "pippo" e di tipo int dovremo scrivere:
int pippo;
ATTENZIONE: prima del nome è necessario specificare SEMPRE il tipo! Un altro esempio: voglio dichiarare una variabile di nome "pluto" di tipo char:
float pluto;
Una volta dichiaraa la variabile può essere utilizzata. Un errore frequente per chi comincia è di utilizzare una variabile senza prima averla dichiarata. Per assegnare un valore alla variabile dichiarata va specificato il nome della variabile seguito dal segno uguale e dal valore che vogliamo assegnare.
Immaginiamo di voler assegnare alla variabile pippo il valore 100. Si può fare in questo modo:
pippo = 100;
Immaginiamo di voler assegnare il carattere "A" alla variabile pluto:
pluto = 'A';
Va notato che questa volta per assegnare il valore abbiamo utilizzato gli apicini singoli. Torneremo ancora su questo argomento. Per ora vi basti sapere che se vogliamo assegnare un valore numerico ad una variabile questo deve essere espresso senza simboli aggiuntivi, mentre nel caso di caratteri va sempre specificato il carattere racchiuso dagli apicini singoli.
E' possibile assegnare anche un valore ad una variabile in fase di dichiarazione. Per quanto riguarda la variabile "pippo" ad esempio avremo potuto anche scrivere una cosa di questo tipo:
int pippo = 100;
La semantica che riguarda le assegnazioni va sempre letta da destra verso sinistra, quindi in quest'ultimo caso l'istruzione appena scritta può essere interpretata in questo modo: "Crea una scatola grande 4 byte di nome pippo ed inseriscici il valore 100"
Spero di essere stata abbastanza chiara. Nella prossima lezione andremo avanti nella trattazione delle variabili e cominceremo a vedere qualche struttura di controllo
Con il termine "variabile" si intende un contenitore, di una certa dimensione, atto a contenere un qualcosa che può essere modificato nel tempo. Una variabile può essere vista, quindi, come una scatola in cui il programmatore inserisce le informazioni che gli possono servire nello svolgimento del programma. Come vedremo l'utilizzo di queste "scatole" può avvenire in diversi modi, quindi oltre che introdurre informazioni, è possibile guardare dentro la scatola per vedere cosa contiene, è possibile estrarre le informazioni per usarle, ed è possibile, in qualsiasi momento, cambiare il contenuto della scatola con nuove informazioni, buttando quelle che non servono più.
Ogni scatola, deve essere grande abbastanza per contenere l'informazione che si vuole inserire. Non è possibile avere scatole piccole se ciò che vogliamo inserire all'interno è più grande della scatola stessa (anche se vedremo che in C, a differenza di linguaggi a più alto livello, questo è possibile, anche se c'è una "penale" da pagare). Per questo motivo esistono in C diversi tipi di scatole, vale a dire diverse dimensioni che si possono dare alla scatola che si vuole utilizzare. I tipi definiti in C sono in totale 7 ed ognuno ha una grandezza diversa e serve per memorizzare al suo interno un certo tipo di dato.
Lasciando ora da parte l'esempio fatto sulle scatole che serviva a dare un'idea di cosa siano le variabili (soprattutto per coloro che non hanno mai programmato) diamo la definizione formale di variabile: una variabile è una locazione di memoria della grandezza pari al tipo utilizzato in fase di definizione, atta a contenere un informazione espressa in formato binario, occupante l'intera locazione.
Prima di procedere con la spiegazione, va detto che cosa si intende per locazione di memoria. Quando il programma va in esecuzione il sistema operativo riserva al programma stesso una certa zona di memoria. Questa zona viene suddivisa ulteriormente in più porzioni ove ogni porzione ha uno specifico compito. Tutte le variabili che vengono create ed utilizzate nel corso del programma risiedono nella porzione chiamata "Data Segment". Questa porzione di memoria viene dimensionata in maniera tale da contenere tutte le variabili create, ed ogni variabile è rappresentata in questa zona da uno o più byte a seconda del tipo con cui è stata dichiarata. In pratica il Data segment è un grosso contenitore che contiene tutte le scatoline che rappresentano le variabili.
Come detto prima i tipi in C sono in totale 7. Vediamo insieme quali sono e quanta memoria occupa ogni tipo:
[LIST]char : occupa 1 byte. Viene utilizzato solitamente per memorizzare singoli caratteri. E' possibile anche memorizzare all'interno valori numerici che vanno da -128 a +127 nel caso di valori con segno e da 0 a 255 nel caso di valori senza segno[/LIST][LIST]short : occupa 2 byte. Utilizzato per memorizzare valori numerici non troppo elevati. Il suo range va da -32768 a 32767 nel caso di valori con segno, oppure da 0 a 65535 nel caso di valori senza segno[/LIST][LIST]int : Questo è un tipo un po' particolare. A seconda del processore e del tipo di compilatore usato può misurare 2 oppure 4 byte. Nel primo caso può memorizzare numeri interi come per lo short, mentre nel caso di 4 byte può arrivare a memorizzare numeri interi che vanno da -2147483647 a +2147483647 nel caso di valori con segno e da 0 a 4294967295 nel caso di valori senza segno.[/LIST][LIST]long : occupa 4 byte. Utilizzato per memorizzare numeri interi molto grandi. Il suo range è identico al tipo int rappresentato con 4 byte[/LIST][LIST]float: occupa 4 byte. Viene utilizzato per memorizzare valori in virgola mobile. Senza addentrarci nella spiegazione di cosa si intende per "virgola mobile" possiamo dire che tali valori rappresentano numeri con virgola (ad esempio 3,45 opppure 1250,43)[/LIST][LIST]double: occupa 8 byte. Viene anch'esso utilizzato per memorizzare valori in virgola mobile[/LIST][LIST]bool: occupa un solo byte.Viene utilizzato per esprimere valori di vero o falso. Di solito alle variabili di questo tipo può essere assegnato il valore esprimendolo tramite la clausola "true" oppure "false". In realtà in C ogni valore numerico uguale a 0 (zero) viene trattato come false mentre tutti i valori diversi da zero sono trattati come true[/LIST]
C'è da aggiungere che i moderni compilatori possiedono anche un ulteriore tipo chiamato "long long" che serve per rappresentare valori numerici interi da 8 byte.
Nella spiegazione dei tipi si è parlato di valori con segno e senza segno. Questo perchè ogni valore all'interno del PC viene rappresentato in forma binaria, utilizzando una serie di 1 e di 0. Ogni valore di questo tipo è chiamato bit, ed un insieme di 8 bit formano un byte. Per rappresentare la positività o la negatività di un numero viene utilizzato il bit più significativo che funge, praticamente, da segno + oppure da segno -. In questo modo, ad esempio, un valore char con segno (rappresentato in memoria da 1 byte quindi 8 bit) avrà a disposizione solamente 7 bit per il valore. Nel caso di valori senza segno, la macchina virtuale C utilizza tutti i bit per rappresentare il valore, quindi in quest'ultimo caso non è possibile avere valori negativi.
Se siete interessati ad un approfondimento riguardo la numerazione binaria scrivetemi pure nel forum ed io vi accontenterò (non mi metto a scrivere se tanto non interessa a nessuno! )
La sintassi per dichiarare una variabile è la seguente:
<tipo> <nome variabile>
Il tipo è uno dei sette identificatori specificato sopra mentre il nome è una sequenza di caratteri scelta a piacere dal programmatore. Se volessimo dichiarare una variabile di nome "pippo" e di tipo int dovremo scrivere:
int pippo;
ATTENZIONE: prima del nome è necessario specificare SEMPRE il tipo! Un altro esempio: voglio dichiarare una variabile di nome "pluto" di tipo char:
float pluto;
Una volta dichiaraa la variabile può essere utilizzata. Un errore frequente per chi comincia è di utilizzare una variabile senza prima averla dichiarata. Per assegnare un valore alla variabile dichiarata va specificato il nome della variabile seguito dal segno uguale e dal valore che vogliamo assegnare.
Immaginiamo di voler assegnare alla variabile pippo il valore 100. Si può fare in questo modo:
pippo = 100;
Immaginiamo di voler assegnare il carattere "A" alla variabile pluto:
pluto = 'A';
Va notato che questa volta per assegnare il valore abbiamo utilizzato gli apicini singoli. Torneremo ancora su questo argomento. Per ora vi basti sapere che se vogliamo assegnare un valore numerico ad una variabile questo deve essere espresso senza simboli aggiuntivi, mentre nel caso di caratteri va sempre specificato il carattere racchiuso dagli apicini singoli.
E' possibile assegnare anche un valore ad una variabile in fase di dichiarazione. Per quanto riguarda la variabile "pippo" ad esempio avremo potuto anche scrivere una cosa di questo tipo:
int pippo = 100;
La semantica che riguarda le assegnazioni va sempre letta da destra verso sinistra, quindi in quest'ultimo caso l'istruzione appena scritta può essere interpretata in questo modo: "Crea una scatola grande 4 byte di nome pippo ed inseriscici il valore 100"
Spero di essere stata abbastanza chiara. Nella prossima lezione andremo avanti nella trattazione delle variabili e cominceremo a vedere qualche struttura di controllo