• Non ci sono risultati.

Variabili di tipo Puntatore

N/A
N/A
Protected

Academic year: 2021

Condividi "Variabili di tipo Puntatore"

Copied!
8
0
0

Testo completo

(1)

Elementi di Informatica 19 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 21 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 23 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 25 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;

alla variabile volume è ora asseganto il valore 15

(5)

Elementi di Informatica 27 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,b; // a variabile di tipo intero

int *aPtr; // aPtr puntatore ad una variabile di tipo intero

a = 7;

aPtr = &a; // ad aPtr è assegnato l’indirizzo di a

// visualizza indirizzo memoria variabile a e valore di aPtr printf("\n aPtr = &a; \n");

printf("\n Indirizzo di a (decimale) = %d -- (esadecimale) %p\n", &a, &a);

printf(“ Valore di aPtr (decimale) = %d -- (esadecimale) %p\n", aPtr, aPtr );

Inizializzazione e uso di puntatori

(6)

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

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

aPtr ha il valore di &a indirizzo di memoria di a

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

Ovvero a e *aPtr hanno lo stesso valore // visualizza valore variabile a e di *aPtr

printf("\n a = 7; \n\n");

printf( " Valore di a = %d\n", a);

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

(7)

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

// assegna ad *aPtr un nuovo valore, che diventa il nuovo valore della // variabile ‘puntata’

*aPtr = 24;

printf("\n *aPtr = 24; \n\n");

printf( " Valore di a = %d\n", a);

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

La modifica del valore di *aPtr fa modificare allo stesso modo il valore della variabile ‘puntata’.

a e *aPtr hanno sempre lo stesso valore (modificato)

// facciamo puntare aPtr alla variabile b cui è assegnato il valore 258 aPtr = &b;

b = 258;

printf("\n aPtr = &b; \n");

printf("\n Indirizzo di b (decimale) = %d -- (esadecimale) %p\n", &b, &b);

printf(“ Valore di aPtr (decimale) = %d -- (esadecimale) %p\n", aPtr, aPtr );

aPtr ha ora il valore di &b

(8)

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

printf("\n b = 258; \n\n");

printf( " Valore di b = %d\n", b);

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

*aPtr ha ora il valore della variabile b = 258

*aPtr = 826;

printf("\n *aPtr = 826; \n\n");

printf( " Valore di b = %d\n", b);

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

} // fine programma

Modificando il valore di

*aPtr cambia anche il valore della variabile b = 826

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