Estratto del documento

Programmazione in C

Variabili

Tipi di variabili:

  • Int (interi)
  • Float (decimali)
  • Char (caratteri)

Variabili locali e variabili globali

Le variabili locali vengono dichiarate all'interno di una funzione e possono essere usate solo da tale funzione.

Esempio:

int main() {
    int a;
}

Le variabili globali invece vengono dichiarate fuori dal main o da qualsiasi altra funzione in modo tale da essere visibili a tutte le funzioni.

Esempio:

int a;
int main() {
    ...
}

Inizializzare una variabile

Per assegnare un valore a una variabile - inizializzare

Esempio: lunghezza = 5;

Incremento di valore: lunghezza++;

Decremento di valore: lunghezza--;

Formati comuni di stringhe di formato

  • %d : interi;
  • %f : float;
  • %c : carattere singolo (carattere ASCII);
  • %s : stringa di caratteri (nella scanf non necessita &);

Variabile puntatore

La memoria è suddivisa in byte, ognuno dei quali è in grado di memorizzare 8 bit di informazione.

Indirizzo univoco

Ogni byte possiede un indirizzo che lo distingue dagli altri. Ogni variabile del programma occupa uno o più byte in memoria e l'indirizzo del primo byte viene considerato l'indirizzo della variabile stessa. Tali indirizzi possono essere salvati all'interno di variabili puntatore.

Quando viene salvato l'indirizzo di una variabile "i" in una variabile puntatore "p", si dice che "p punta ad i".

Dichiarare una variabile puntatore

Sintassi:

int *p;

Questa dichiarazione stabilisce che p è una variabile in grado di puntare a variabili di tipo int.

Operatore indirizzo

Prima di utilizzare una variabile puntatore è necessario inizializzarla. Un modo per inizializzare una variabile puntatore è quello di assegnarle l'indirizzo di una variabile.

Sintassi:

int i;
int *p;
p = &i; // L'ultima istruzione assegna l'indirizzo di i alla variabile p, quindi "p punta a i"

Assegnamento di puntatori

p = &i; l'indirizzo di i viene copiato all'interno del puntatore p, per cui p punta ad i.

q = p; il contenuto di p (l'indirizzo di i) viene copiato all'interno di q, quindi p e q puntano ad i.

Ora che sia p che q puntano ad i, si può modificare i assegnando valori sia a *p che *q.

Esempio:

*p = 2;
*q = 1;

L'assegnamento *q = *p copia il valore al quale punta p nell'oggetto puntato da q.

Puntatori usati come argomenti

Per avere sottoprogrammi più flessibili, invece di passare la variabile x come argomento della funzione, passeremo l'indirizzo di x, ovvero un puntatore a x (*int x). Quando la funzione verrà invocata p avrà il valore di &x e quindi *p sarà un alias di x.

Sintassi:

int main() {
    int x, y;
    foo(&x, &y); // Alla funzione viene passato l'indirizzo di x (&x) e l'indirizzo di y (&y).
    ...
}
void foo(int *a, int *b) {
    ...
}

Puntatori usati come valori restituiti

Possiamo scrivere funzioni che restituiscono puntatori.

Sintassi:

int *max(int *a, int *b) {
    if (*a > *b)
        return a;
    else
        return b;
}

int main() {
    int *p, i, j;
    p = max(&i, &j); // Se i > j, la funzione max restituisce i, altrimenti j.
    ...
}

Aritmetica dei puntatori

  • Sommare un intero a un puntatore
int a[5];
p = &a[2];
q = p + 3;
p += 6;
  • Sottrarre un intero a un puntatore
int a[5];
p = &a[5];
q = p - 3;
p -= 6;
  • Sottrarre o sommare due puntatori
int a[5];
p = &a[5];
q = &a[3];
i = p - q;

Operatore asterisco

Una volta che una variabile puntatore punta a un oggetto, possiamo usare l'operatore * per accedere al contenuto dell'oggetto stesso. Quando p punta a i, *p è un alias di i, per cui *p ha lo stesso valore di i e cambiando valore a *p si modifica anche il valore di i.

Esempio:

p punta ad i
printf("%d", *p);

In questo caso la funzione printf stampa il valore di i.

Non applicare mai l'operatore * a una variabile non inizializzata.

Scanf (gets) e Printf (puts)

Leggere l'input

scanf("%d", &lunghezza); // NB: l'operatore & differenzia la printf dalla scanf, non va usato con le stringhe.

Esempio:

scanf("%s", felicità);
gets(lunghezza); // NB: gets (stringa) equivale a scanf("%s", stringa) con una unica differenza: la scanf si ferma a qualsiasi carattere che rappresenti uno spazio bianco, mentre la gets continua a leggere fino al tappo.

Stampare l'input

  • Stampare il valore di una variabile
printf("%d", lunghezza);
  • Stampare il valore di una operazione
valore = a * b * c;
printf("%d", valore);
// ottimizzazione
printf("%d", a * b * c);
  • Stampare il valore di una stringa
puts(stringa);
// NB: puts (stringa) equivale a printf("%s", stringa)

& specifica che il valore deve essere convertito dalla forma binaria alla forma da stampare. Nella printf NON va posto "printf("%d", &valore)"

Operatori aritmetici

  • Somma: +
  • Differenza: -
  • Moltiplicazione: *
  • Divisione: /
  • Resto: %
  • Incremento: i++
  • Decremento: i--

Operatori di confronto:

  • Maggiore: >
  • Maggiore uguale: >=
  • Minore: <
  • Minore uguale: <=
  • Uguale: ==
  • Diverso: !=

Operatori logici

[contenuto mancante]

Anteprima
Vedrai una selezione di 6 pagine su 22
Informatica Pag. 1 Informatica Pag. 2
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Informatica Pag. 6
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Informatica Pag. 11
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Informatica Pag. 16
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Informatica Pag. 21
1 su 22
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher silvia__g di informazioni apprese con la frequenza delle lezioni di fondamenti di informatica e programmazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Torino o del prof Benso Alfredo.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community