In Go, un puntatore è una variabile che memorizza l'indirizzo di un'altra variabile. L'indirizzo è la posizione di memoria univoca in cui è archiviata la variabile. I puntatori vengono creati utilizzando l'operatore "&", che restituisce l'indirizzo di una variabile.
Ad esempio, supponiamo di avere una variabile "numero" di tipo "int". Possiamo creare un puntatore a "numero" utilizzando l'operatore "&":
"vai."
numero:=10
puntatore :=&numero
```
La variabile "pointer" ora memorizza l'indirizzo di memoria della variabile "number".
Per accedere al valore di un puntatore, possiamo utilizzare l'operatore `*`. L'operatore "*" dereferenzia un puntatore, restituendo il valore memorizzato nell'indirizzo di memoria contenuto nel puntatore.
Nel nostro esempio, possiamo dereferenziare la variabile `pointer` per accedere al valore della variabile `number`:
"vai."
dereferencedNumber :=*pointer
```
La variabile "dereferencedNumber" ora memorizza il valore della variabile "number", che è 10.
I puntatori possono essere utilizzati anche per eseguire l'aritmetica dei puntatori. L'aritmetica dei puntatori è il processo di aggiunta o sottrazione di numeri interi da un puntatore per modificare l'indirizzo di memoria a cui fa riferimento.
Ad esempio, supponiamo di avere un array di numeri interi chiamato "arr" e di voler scorrere gli elementi dell'array. Possiamo usare l'operatore `+` per aggiungere un numero intero a un puntatore per passare all'elemento successivo dell'array:
"vai."
arr :=[5]int{1, 2, 3, 4, 5}
// Inizializza un puntatore al primo elemento dell'array
puntatore :=&arr[0]
// Itera attraverso l'array utilizzando l'aritmetica dei puntatori
per i :=0; io
valore :=*puntatore
// Stampa il valore
fmt.Println(valore)
// Incrementa il puntatore per spostarsi all'elemento successivo dell'array
puntatore++
}
```
In questo esempio, il puntatore "pointer" è inizialmente impostato sull'indirizzo del primo elemento dell'array. Quindi, il ciclo "for" scorre l'array, dereferenziando il "puntatore" a ogni iterazione per ottenere il valore dell'elemento corrente. Il "puntatore" viene quindi incrementato per spostarsi all'elemento successivo dell'array.
I puntatori possono essere passati come argomenti alle funzioni. Ciò consente alle funzioni di manipolare direttamente l'indirizzo di memoria delle variabili, anziché creare una copia della variabile.
Ad esempio, supponiamo di avere una funzione chiamata "incremento" che incrementa il valore di un numero intero. Possiamo passare un puntatore a un numero intero come argomento alla funzione "incremento", consentendo alla funzione di modificare direttamente il valore del numero intero:
"vai."
funzione incremento(ptr *int) {
// Dereferenzia il puntatore per ottenere il valore all'indirizzo di memoria
valore :=*ptr
// Incrementa il valore
valore++
// Memorizza nuovamente il valore incrementato nell'indirizzo di memoria
*ptr =valore
}
funzione principale() {
// Crea una variabile intera
numero:=10
// Passa un puntatore alla variabile come argomento alla funzione di incremento
incremento(&numero)
// Stampa il valore incrementato
fmt.Println(numero) // Risultato:11
}
```
In questo esempio, la funzione "incremento" accetta un puntatore a un numero intero come argomento. La funzione dereferenzia il puntatore per ottenere il valore all'indirizzo di memoria, incrementa il valore,
Passaggio di puntatori alle funzioni
Informazioni correlate
Domanda © www.354353.com