• Non ci sono risultati.

Variabili di tipo Puntatore

N/A
N/A
Protected

Academic year: 2021

Condividi "Variabili di tipo Puntatore"

Copied!
6
0
0

Testo completo

(1)

Elementi di Informatica 31 Prof. G. A. Di Lucca - Univ. del Sannio

Variabili di tipo Puntatore

• Le variabili ‘normali’ contengono un valore di un’informazione

cont 128

nome della variabile locazione di memoria

valore della variabile

• Un puntatore è una variabile il cui valore è un indirizzo di memoria

Puntatori

• Un puntatore contiene l’indirizzo di memoria di una variabile che ha uno specifico valore

128 cont

• contptr nome della variabile

puntatore

nome della variabile puntata

valore della variabile

locazione di memoria

(2)

Elementi di Informatica 33 Prof. G. A. Di Lucca - Univ. del Sannio

Puntatori nome della variabile

puntatore

nome della variabile puntata

valore della variabile indirizzo di memoria

128 cont

7236 3254

contptr 7236

Puntatori

• I puntatori (pointer) sono “type bound” cioè ad ogni puntatore è associato il tipo della variabile cui il puntatore si riferisce.

• In C, nella dichiarazione di un puntatore bisogna specificare un asterisco (*) davanti al nome della variabile pointer.

• Esempio:

– int *pointer; // puntatore ad una variabile intera

– char *puntcar; // puntatore ad una variabile carattere

– float *fltpnt; // puntatore ad una variabile float

(3)

Elementi di Informatica 35 Prof. G. A. Di Lucca - Univ. del Sannio

Inizializzazione di puntatori

• Prima di poter usare un puntatore questo deve essere inizializzato, assegnandogli l’indirizzo di una variabile

• i valori 0 oppure NULL (NULL è preferito) inizializzano un puntatore ad un valore nullo (non puntano a nessuna locazione)

• L’operatore unario & è usato per assegnare l’indirizzo di memoria di una variabile ad un puntatore

• & (address operator)

• fornisce l’indirizzo di una variabile

int y = 5; // dichiara variabile y e le assegna il valore 5 int *yPtr; // dichiara puntatore ad interi yPtr

yPtr = &y; //a yPtr è assegnato l’indirizzo di memoria di y

• yPtr “punta a” y

Inizializzazione e uso di puntatori

yPtr

y

5

yPtr

500000 540000

y

540000 5

L’indirizzo di y è il valore di yPtr

indirizzo di indirizzo di

(4)

Elementi di Informatica 37 Prof. G. A. Di Lucca - Univ. del Sannio

• *

(operatore di indirezione o deferimento)

– Restituisce un alias o sinonimo di ciò che il suo operando punta – con riferimento all’esempio precedente (yPtr = &y;)

*yPtr riferisce il valore di y (perchè yPtr punta a y) – l’operatore * può essere usato per assegnare un valore alla

variabile puntata

*yptr = 7; // assegna alla variabile y il valore 7

Inizializzazione e uso di puntatori

Inizializzazione e uso di puntatori

Esempio:

int volume;

int *vol_ptr=NULL; // dichiara il puntatore *vol_ptr e lo inizializza a NULL

vol_ptr = &volume; // assegna a *vol_ptr l’indirizzo della variabile intera volume

Il puntatore vol_ptr contiene ora l’indirizzo della variabile volume.

• Si può assegnare un valore all’oggetto puntato da vol_ptr utilizzando l’operatore di indirezione “ * “.

• Eseguendo l’istruzione:

*vol_ptr= 15;

la variabile volume ora contiene il valore 15

(5)

Elementi di Informatica 39 Prof. G. A. Di Lucca - Univ. del Sannio

Inizializzazione ed uso di puntatori int volume, *vol_ptr;

// dichiara il puntatore a *vol_ptr

vol_ptr = &volume;

// assegna a *vol_ptr l’indirizzo di volume

*vol_ptr = 15;

// assegna a volume il valore 15

vol_ptr = &volume; ==> vol_ptr = 3221

*vol_ptr= 15; ==> volume = 15

3221 15

Indirizzi memoria

Locazione di memoria assegnata a volume

Locazione di memoria assegnata a vol_ptr

3221

4345

. . .

Memoria

// Esempio di uso degli operatori & e *

#include <stdio.h>

int main()

{ int a; // a variabile di tipo intero

int *aPtr; // aPtr pointer ad una variabile di tipo intero a = 7;

aPtr = &a; // ad aPtr è assegnato l’indirizzo di a printf( “Indirizzo di a = %p”

"\n Valore di aPtr = %p", &a, aPtr );

printf( "\n\n Valore di a = %d"

"\n Valore di *aPtr = %d", a, *aPtr );

L’indirizzo di memoria di a costituisce il valore di aPtr.

L’operatore * restituisce un alias di ciò che punta il suo operando. aPtr punta ad a, quindi *aPtr restituisce a.

Inizializzazione e uso di puntatori

(6)

Elementi di Informatica 41 Prof. G. A. Di Lucca - Univ. del Sannio

Indirizzo di a = 0012FF88 Valore di aPtr = 0012FF88

Valore di a = 7

Valore di *aPtr is 7

Inizializzazione e uso di puntatori

… l’output del programma sarà:

Riferimenti

Documenti correlati

Questo equivale a dire che occorre di- mostrare formalmente che il massimo ` e sempre il primo elemento della lista.. Mos- triamo una bozza di dimostrazione

ƒ restituisce un puntatore che contiene l’indirizzo del blocco di memoria allocato, cioè della variabile, la quale sarà quindi accessibile dereferenziando il puntatore. ƒ la

■ Quindi il vero argomento della prima funzione non é la seconda funzione, ma un normale valore, che può avere qualsiasi origine (variabile, espressione ecc...), e in particolare

Un puntatore ` e una variabile che contiene l’indirizzo in memoria di un’altra variabile (del tipo dichiarato).. Esempio: dichiarazione

Lo spazio allocato a una variabile di tipo puntatore è sempre uguale, indipendentemente dal tipo dell’oggetto puntato.. L’Operatore di

Lo spazio allocato a una variabile di tipo puntatore è sempre uguale, indipendentemente dal tipo dell’oggetto puntato.. Il Tipo

Ad ogni file è associato un inodo che contiene 2 puntatori ad un blocco indiretto singolo ed il resto del blocco contiene puntatori diretti al file. Se ogni puntatore a blocco

La funzione crea_lista() crea due puntatori ad elemento, uno di nome p (puntatore al primo elemento della lista) e l'altro di nome punt (puntatore che permette di scorrere la