FONDAMENTI DI INFORMATICA
Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI
Facoltà di Ingegneria
Università degli Studi di Udine
Linguaggio C
I puntatori
Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine.
Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell’Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione.
Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori.
L’informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell’informazione).
In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.
In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono
Nota di Copyright
I puntatori in C:
un concetto molto generale
• Un puntatore è una variabile che contiene l’indirizzo di un’altra variabile.
p = &x; L’operatore & fornisce l’indirizzo di un
oggetto
y = *p; L’operatore * accede
all’oggetto puntato
int *p; La variabile p è dichiarata puntatore ad intero
05FD
07C2
puntatore p
variabile intera x FFFF
07C2
double *dp;
char *ch;
*ip = *ip + 10;
++*ip;
(*ip)++;
*ip++;
Cosa significa?
→ dp è un puntatore a double
→ ch è un puntatore a char
→ incrementa di 10 il dato puntato da ip
→ !!! incrementa di 1 il puntatore ip
→ incrementano di 1 il dato puntato da ip
Esempio
int x = 5;
int *ip;
ip = &x; /* adesso *ip vale 5 */
*ip = 0; /* adesso *ip vale 0,
e anche x */
#include <stdio.h>
#include <stdlib.h>
int main() {
int x;
int *ip;
x = 5;
printf ("x = %d, &x = %x, ip = %x (casuale)\n", x, &x, ip);
ip = &x; /* adesso *ip vale 5 */
printf ("x = %d, &x = %x, ip = %x\n", x, &x, ip);
*ip = 0; /* adesso *ip vale 0, e anche x */
printf ("x = %d, &x = %x, ip = %x\n", x, &x, ip);
return EXIT_SUCCESS;
Esempio
Puntatori e argomenti di funzione
• Il C passa alle funzioni gli
argomenti per valore (by value)
• La funzione chiamata non può modificare direttamente una
variabile nella funzione chiamante (lavora sulle copie delle variabili)
• Dichiarare gli argomenti di una funzione come puntatori permette alla funzione chiamata di accedere agli oggetti all’interno della
funzione chiamante (passaggio di variabili by reference)
Chiamante
Chiamata
px b
py a ...
...