Home Rhyylen
Contatto
 
 
 
Rust Language
Capitolo 25
Puntatori (base)

In questo breve paragrafo parleremo di due operatori che riportano alla mente i puntatori di altri linguaggi.

& - lo abbiamo già visto crea un riferimento ad un elemento (cioè punta all'area di memoria che contiene un dato elemento) che può essere mutabile oppure no, abbiamo visto che &T e &mut T sono gli operatori per i due casi.
* - è l'operatore di dereferenziazione e accede direttamente al valore in memoria.

Ecco l'esempio:

  Esempio 25.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fn main() {
let val = 10; // una variabile di tipo intero
let r = &val; // r è un riferimento immutabile a val

println!("Il valore di val: {}", val); // stampa il valore di val
println!("Il valore di r: {}", *r); // stampa il valore puntato da r

let mut val_mut = 20; // una variabile mutabile di tipo intero
let r_mut = &mut val_mut; // r_mut è un riferimento mutabile a val_mut

*r_mut += 10; // modifica il valore di val_mut tramite riferimento
// ora stampa il nuovo valore di val_mut
println!("Il nuovo valore di val_mut: {}", val_mut);
}

con questo output:

Il valore di val: 10
Il valore di r: 10
Il nuovo valore di val_mut: 30

Come vedete attraverso & siamo arrivati a ,legare il valore puntato ad una variabile mentre con * abbiamo modificato il valore in memoria. Questo modi di operare è ben noto a chi usa i puntatori, in Rust è più raro rispetto a quanto ad esempio avviene con chi programma in C. Resta fermo il concetto che può esistere un solo puntatore mutabile ad una variabile. Ecco comunque un altro semplice esempio:

  Esempio 25.2
1
2
3
4
5
6
fn main() {
    let mut x = 10;
    let y = &mut x;  // `y` è un riferimento mutabile a `x`
    *y += 1;         // Modifichiamo `x` tramite il riferimento `y`
    println!("x: {}", x);  // Stampa "x: 11"
}

Questo è il caso diciamo "base" e più semplice da capire. In realtà Rust ha altri tipi di puntatore, un tipo si avvicina molto a quelli usati proprio in C, si parla di puntatori raw, ma abbiamo anche gli smart pointer. Di tutti ne parleremo in appositi paragrafi, in questo abbiamo parlato di quelli più diffusi ed utili per arrivare a parlare delle funzioni con tutti gli strumenti pronti.