Aller - Pointeur vers pointeur

Un pointeur vers un pointeur est une forme de chaîne de pointeurs. Normalement, un pointeur contient l'adresse d'une variable. Lorsque nous définissons un pointeur vers un pointeur, le premier pointeur contient l'adresse du deuxième pointeur, qui pointe vers l'emplacement qui contient la valeur réelle comme indiqué ci-dessous.

Une variable qui est un pointeur vers un pointeur doit être déclarée comme telle. Cela se fait en plaçant un astérisque supplémentaire devant son nom. Par exemple, l'instruction suivante déclare un pointeur vers un pointeur de type int -

var ptr **int;

Lorsqu'une valeur cible est indirectement pointée par un pointeur vers un pointeur, l'accès à cette valeur nécessite que l'opérateur astérisque soit appliqué deux fois, comme illustré dans l'exemple suivant -

package main

import "fmt"

func main() {
   var a int
   var ptr *int
   var pptr **int

   a = 3000

   /* take the address of var */
   ptr = &a

   /* take the address of ptr using address of operator & */
   pptr = &ptr

   /* take the value using pptr */
   fmt.Printf("Value of a = %d\n", a )
   fmt.Printf("Value available at *ptr = %d\n", *ptr )
   fmt.Printf("Value available at **pptr = %d\n", **pptr)
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Value of var = 3000
Value available at *ptr = 3000
Value available at **pptr = 3000