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

Tutoriel de base en Golang

Instructions de contrôle en Golang

Fonctions & méthodes en Golang

Structures en Golang

Coupes & tableaux en Golang

Chaînes de caractères (String) en Golang

Pointeurs en Golang

Interfaces en Golang

Concurrence en Golang

Exceptions en Golang (Error)

Divers en Golang

Pointeur de pointeur en Go (double pointeur)

Un pointeur en langage Go est une variable utilisée pour stocker l'adresse mémoire d'une autre variable. Un pointeur est une variable spéciale, donc il peut pointer vers n'importe quel type de variable. En général, cela ressemble à une chaîne de pointeurs. Lorsque nous définissons un pointeur de pointeur, le premier pointeur est utilisé pour stocker l'adresse du second pointeur. Ce concept est parfois appelé

Double pointeur
. * Comment déclarer un pointeur de pointeur en Golang ?Pour déclarer un pointeur de type Pointer comme dans la déclaration de pointeur en Go. La différence réside en ce que nous devons placer un ' supplémentaire avant le nom du pointeurC'est généralement, lorsque nous utilisons

Exemple1:var clépt2et la déclaration de type de pointeur variable peuvent accomplir cette opération.pt1Dans le programme suivant, le pointeurpt2stocké* pt2valeur. Déréférencementvl'adresse, ou vous pouvez dire le pointeurpt1valeur. Si vous essayez** pt2,Alors, la variablevvaleur, c'est-à-dire100.

package main
import "fmt"
func main() {
    //Variable de type entier
    var V int = 100
    //Obtenir un pointeur
    //type entier
    var pt1 *int = &V
    //Obtenir le pointeur pointé
    //pointe vers pt1L'adresse de pointeur de
    //Stocker l'adresse de pointeur de pt1Convertir en pt2
    var pt2 **int = &pt1
    fmt.Println("La valeur de la variable V est égale à ", V)
    fmt.Println("L'adresse de la variable V est égale à ", &V)
    fmt.Println("pt1valeur est égale à1)
    fmt.Println("pt1adresse est égale à1)
    fmt.Println("pt2valeur est égale à2)
    //Déréférencement
    //pointeur de pointeur
    fmt.Println("pt2La valeur à l'adresse (*pt2)= *pt2)
    //Les double pointeurs donneront la valeur de la variable V
    fmt.Println("*(pt2La valeur à l'adresse) ou **pt2 =" **pt2)
}

Sortie :

La valeur de la variable V est égale à  100
L'adresse de la variable V est égale à 0xc000062090
pt1valeur est égale à 0xc000062090
pt1L'adresse est égale à 0xc00008c018
pt2valeur est égale à 0xc00008c018
pt2La valeur à l'adresse (*pt2) = 0xc000062090
*(pt2La valeur à l'adresse) ou **pt2 =  100

Exemple2:Laissez-nous apporter quelques modifications au programme ci-dessus. Pour assigner de nouvelles valeurs aux pointeurs en utilisant l'affectation de déréférencement, voici comment il se passe :

// Un programme Go pour expliquer le concept de pointeur pointant vers un pointeur
package main
import "fmt"
func main() {
    // Définir une variable de type int
    var v int = 100
    // Un pointeur de type entier
    var pt1 *int = &v
    //Obtenir le pointeur pointé
    //pointe vers pt1L'adresse de pointeur de
    //Stocker l'adresse de pointeur de pt1Convertir en pt2
    var pt2 **int = &pt1
    fmt.Println("La valeur de la variable v est égale à ", v)
    //Modifier la valeur de v par affectation
    //Le pointeur pt pointe vers1nouvelle valeur
    *pt1 = 200
    fmt.Println("Modifier pt1La valeur stockée après dans v est égale à ", v)
    //Modifier la valeur de v par affectation
    //Le pointeur pt pointe vers2nouvelle valeur
    **pt2 = 300
    fmt.Println("Modifier pt2La valeur stockée après dans v est égale à ", v)
}

Sortie :

La valeur de la variable v est égale à  100
Modifier pt1La valeur stockée après dans v est égale à  200
Modifier pt2La valeur stockée après dans v est égale à  300

Connaissances connexes :Pointeur Go