TIPI DERIVATI
tipi che per essere
specificati hanno bisogno di un tipo base (int, float, double, char)
es.
array
puntatori
strutture
enumerazioni
ARRAY (O TABELLE O VETTORI)
<tipo>
<identificatore> [<dimensione>]
variabili int x = 5;
valori 5
array
=
sequenze
finite omogenee di valori;
collezioni
finite di variabili contigue dello stesso tipo
è una variabile
strutturata in cui è possibile memorizzare un numero fissato
di valori tutti dello stesso tipo
es.
int a[6]; /*
dichiarazione di un array di nome a atto a memorizzare6 elementi di
tipo int*/
Ogni elemento di un
array è individuato da un indice(da 0 a lunghezza dell’array
meno 1)
es.
int
vettore[4];
[int x] è in
questo caso un operatore
“vettore” è
l'indirizzo della prima cella di memoria
vettore[0];
non è una
variabile ma un'espressione che restituisce una variabile
(designatore)
int
vettore[4]; alloca 4 locazioni di memoria
vettore[1+2] = 17;
assegna alla 4^ locazione il valore 17
come fa a capire
dove scrivere il valore in memoria?
per il fatto che
l'array è una collezione di variabili dello stesso tipo: si
contano i passi da fare rispetto alla dimensione dell'intero partendo
dall’indirizzo indicato dalla variabile (il nome di un array
è una costante - si noti bene: una costante, non una variabile
! - il cui valore è l’indirizzo del primo elemento
dell’array))
int
i = 5;
int
vettore[3];
int
j = 7;
vettore[2]
= 6;
vettore[3]
= 7; /* molto pericoloso perchè il C non tiene conto dei
limiti fisici dell'array */
int
vettore[3];
vettore[0]
= 4;
vettore[1]
= 5;
vettore[2]
= 7;
oppure posso scrivere
int
vettore[] = {4,5,7}
in questo caso posso
omettere la dimensione dell'array
SOSTITUZIONE SINTATTICA
#define
DIM 7
int
vettore[DIM];
#define
DIM 3+2 /* pericoloso, mettere le parentesi */
y
= DIM * 3;
è come scrivere
3 + 2 * 9; restituirà 9
#const
int DIM = 7 # define DIM 7
int
vettore [DIM]
il vantaggio del define
è che non mi occupa alcuna memoria: va bene se ho
valori semplici, se ho espressioni devo ricordarmi di metterle tra
parentesi e di non mettere il “;” dopo il define
#define
DIM 7
int
vettore[DIM];
int
i, somma = 0;
double
media;
for
(i = 0; i < DIM, i++)
scanf(“
%d”, &(vettore[i]));
for
(i = 0; i < DIM; i++)
somma
+= vettore[i];
media
= somma / (double) DIM;
se non avessi messo il
casting esplicito ci sarebbe stato un troncamento
l'invariante
nel secondo ciclo for e la somma ecc.ecc.
int
a[5];
alloca in memoria 5
variabili contigue di tipo int; l'espressione a mi restituisce
l'indirizzo della prima variabile
una variabile è
una locazione di memoria la quale è univocamente determinata
da un indirizzo
|