Appunti di programmazione

Appunti per il corso universitario di programmazione, riferito al linguaggio ANSI C
Redatti all'università di Venezia

ARGOMENTI

STRUTTURA COMPUTER

DEFINIZIONI

TASTIERA E TIPI

AMBIENTE E MEMORIA

COMANDI

FUNZIONI E PROCEDURE

TIPI DERIVATI

PUNTATORI

STRINGHE

ARRAY DI PUNTATORI

STRUTTURE

TYPEDEF E ENUM

PUNTATORI A PROCEDURE

ALLOCAZIONE DINAMICA

LISTE

ALGORITMI

ERRORI

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

Ritorna sopra | Home page