English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base Golang

Controllo Golang

Funzione e metodo Golang

Struttura Golang

Tagli e array Golang

Stringa (String) Golang

Puntatore Golang

Interfaccia Golang

Concordanza Golang

Eccezioni Golang (Error)

Altri argomenti Golang

Puntatore a puntatore Go (doppio puntatore)

Un puntatore nel linguaggio di programmazione Go è una variabile che memorizza l'indirizzo di un'altra variabile. Un puntatore è una variabile speciale, quindi può puntare a qualsiasi tipo di variabile. Sembra基本上 una catena di puntatori. Quando si definisce un puntatore che punta a un altro puntatore, il primo puntatore viene utilizzato per memorizzare l'indirizzo del secondo puntatore. Questo concetto a volte viene chiamatoDoppio puntatore.

Come dichiarare un puntatore che punta a un altro puntatore in Golang?
Si dichiara un puntatore come Pointer, simile a dichiarare un puntatore in Go. La differenza sta nel fatto che dobbiamo mettere un altro '' prima del nome del puntatore * Di solito, quando usiamoChiave varE quando si dichiara un variabile di tipo puntatore, si può completare questa operazione.

Esempio 1:Nel seguente programma, il puntatorept2Memorizzazionept1L'indirizzo del puntatore. Richiamopt2Ecco* pt2Verrà fornito il variabilevL'indirizzo, o puoi anche dire puntatorept1Il valore. Se provi a** pt2,Allora verrà fornito il variabilevIl valore, ovvero 100.

package main
import "fmt"
func main() {
    //Variabile di tipo intero
    var V int = 100
    //Ottenimento di un puntatore
    //Di tipo intero
    var pt1 *int = &V
    //Ottenimento del puntatore
    //Indirizzo di memorizzazione del puntatore a pt1
    //Conversione di pt1 a pt2
    var pt2 **int = &pt1
    fmt.Println("Il valore della variabile V è = ", V)
    fmt.Println("L'indirizzo della variabile V è = ", &V)
    fmt.Println("Il valore di pt1 è = ", pt1)
    fmt.Println("L'indirizzo di pt1 è = ", &pt1)
    fmt.Println("Il valore di pt2 è = ", pt2)
    //Indirezione
    //Puntatore a puntatore
    fmt.Println("Il valore all'indirizzo dell'indirizzo pt2 è (*pt2) = ", *pt2)
    //I doppi puntatori daranno il valore della variabile V
    fmt.Println("*(valore all'indirizzo pt2) o **pt2 = ", **pt2)
}

Output:

Il valore della variabile V è = 100
L'indirizzo della variabile V è = 0xc000062090
Il valore di pt1 è = 0xc000062090
L'indirizzo di pt1 è = 0xc00008c018
Il valore di pt2 è = 0xc00008c018
Il valore all'indirizzo dell'indirizzo pt2 è (*pt2) = 0xc000062090
*(valore all'indirizzo pt2) o **pt2 = 100

Esempio 2:Facciamo alcune modifiche al programma sopra. Assegniamo nuovi valori ai puntatori utilizzando l'indirezione come segue:

//Go programma per illustrare il concetto di puntatore a puntatore
package main
import "fmt"
func main() {
    //Definizione di variabile di tipo int
    var v int = 100
    //Puntatore di tipo intero
    var pt1 *int = &v
    //Ottenimento del puntatore
    //Indirizzo di memorizzazione del puntatore a pt1
    //Conversione di pt1 a pt2
    var pt2 **int = &pt1
    fmt.Println("Il valore della variabile v è = ", v)
    //Modifica del valore di v tramite assegnamento
    //Nuovo valore del puntatore pt1
    *pt1 = 200
    fmt.Println("Il valore memorizzato in v dopo aver modificato pt1 = ", v)
    //Modifica del valore di v tramite assegnamento
    //Nuovo valore del puntatore pt2
    **pt2 = 300
    fmt.Println("Il valore memorizzato in v dopo aver modificato pt2 = ", v)
}

Output:

Il valore della variabile v è = 100
Il valore memorizzato in v dopo aver modificato pt1 = 200
Il valore memorizzato in v dopo aver modificato pt2 = 300

Conoscenze correlate:Puntatore Go