Un'espressione è composta da operandi e operatori.
All'interno di un'espressione non possono essere usate parole chiave;
ad es. non è lecito scrivere:
c = auto + 2;
Ecco alcuni esempi di espressioni lecite:
1) 2 + 3
2) d + z
3) b < a
4) 300
5) b = c + a
Omettiamo di discutere i primi quattro esempi, che sono banali somme,
confronti o valori costanti e passiamo al quinto.
Tale esempio significa: "Prendi il contenuto della variabile
c, prendi il contenuto della variabile a, sommali
e poni il risultato nella variabile b".
Per capire quanto appena detto occorre la seguente definizione:
Una variabile è una locazione di memoria, ove si possono scrivere
e/o leggere dati.
In C una variabile viene rappresentata mediante un identificatore
alfanumerico.
Nel seguente esempio, a è una variabile cui assegniamo il
valore 10:
a = 10;
Una variabile è costituita da tre parti:
- il nome;
- il valore;
- lindirizzo.
Per assegnare il nome ad una variabile occorre dichiararla, cioè
dire al compilatore C (v. lezione
2) di riservare uno spazio di memoria per contenerla.
Il compilatore si occuperà di cercare unarea libera di memoria
da assegnare alla variabile; questarea si trova ad un determinato
indirizzo.
Per leggere il valore della variabile possiamo utilizzare sia il
nome che il suo indirizzo in memoria, ma per il momento utilizzeremo
solo la prima possibilità.
Avviamo emacs:
$ emacs
e scriviamo il seguente esempio:
#include <stdio.h>
main()
{
int a = 10;
printf("Valore di a = %d\n", a);
printf("Indirizzo di a = %x\n", &a);
printf("Dimensione di a = %u byte\n", sizeof(a));
exit(0);
}
Salviamolo col nome var.c, compiliamolo con il comando:
$ gcc o var var.c
ed eseguiamolo:
$ ./var
Loutput che si ottiene è del tipo:
Valore di a = 10
Indirizzo di a = bffff8d8
Dimensione di a = 4 byte
Tralasciando il significato di alcune istruzioni che impareremo
a conoscere nel seguito, il programma stampa il valore di a,
che è quello che abbiamo assegnato noi stessi, l'indirizzo di memoria
(in notazione esadecimale) nel quale la variabile è memorizzata
e la sua dimensione, cioè il numero di byte che il compilatore ha
riservato ad a.
Si noti che, poiché lindirizzo di a è assegnato dal
compilatore e dipende dallo stato della macchina (quantità di memoria,
numero di processi caricati in memoria, etc.), il valore ottenuto
in fase di esecuzione varia da macchina a macchina e anche tra due
diverse esecuzioni del programma sulla stessa macchina.
Quello che per il momento è importante sottolineare è il fatto che
le variabile non sono altro che contenitori per i dati.
Un'istruzione è un comando C completo.
Tutte le istruzioni terminano con il carattere ";", ad
es.:
a = 1000;
c = 1;
b = a + c;
Supponendo che il compilatore abbia memorizzato le tre variabili
in celle di memoria consecutive, il loro contenuto è il seguente:
a | 1000 |
b | 1001 |
c | 1 |
Le istruzioni possono essere raggruppate in blocchi.
I blocchi di istruzioni sono compresi tra un carattere di
inizio '{' e uno di fine '}', ad es.:
if (a < b) {
c = a * b;
a = a + 1;
}
In questo esempio il blocco di istruzioni è quello che segue la
parola chiave if, ovvero:
c = a * b;
a = a + 1;
Il significato di questa porzione di codice C è: "Se il valore
(il contenuto) della variabile a è minore di quello della
variabile b, allora poni nella variabile c il valore
di a moltiplicato per quello di b, ed aumenta il valore
della variabile a di 1".
Le parentesi graffe servono a segnalare al compilatore di trattare
tutte le istruzioni del blocco come ununica entità, cioè come
se fossero ununica istruzione semplice.
I blocchi possono anche essere annidati, cioè avere porzioni di
codice del tipo:
while (1) {
b = c + 1;
if (a < b) {
b = a + 1;
}
}
Nella lezione successiva impareremo a conoscere le funzioni e i
blocchi di funzione.
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet