Ir de puntero a puntero (puntero doble)

Requisito previo: Punteros en Go

Los punteros en el lenguaje de programación Go o Golang es una variable que se utiliza para almacenar la dirección de memoria de otra variable. Un puntero es una variable especial, por lo que puede apuntar a una variable de cualquier tipo, incluso a un puntero. Básicamente, esto parece una string de punteros. Cuando definimos un puntero a puntero, el primer puntero se usa para almacenar la dirección del segundo puntero. Este concepto a veces se denomina punteros dobles .

¿Cómo declarar un puntero a puntero en Golang?
Declarar puntero a puntero es similar a declarar puntero en Go . La diferencia es que tenemos que colocar un ‘ * ‘ adicional antes del nombre del puntero. Esto generalmente se hace cuando declaramos la variable de puntero usando la palabra clave var junto con el tipo. El siguiente ejemplo e imagen explicarán el concepto de una manera mucho mejor.

Ejemplo 1: En el siguiente programa, el puntero pt2 almacena la dirección del puntero pt1 . Quitar la referencia a pt2, es decir , *pt2, dará la dirección de la variable v o también puede decir el valor del puntero pt1 . Si intenta **pt2 , esto le dará el valor de la variable v, es decir, 100.

Double Pointer in Go

// Go program to illustrate the
// concept of the Pointer to Pointer
package main
   
import "fmt"
   
// Main Function
func main() {
   
        // taking a variable
        // of integer type
    var V int = 100
       
    // taking a pointer 
    // of integer type 
    var pt1 *int = &V
       
    // taking pointer to 
    // pointer to pt1
    // storing the address 
    // of pt1 into pt2
    var pt2 **int = &pt1
   
    fmt.Println("The Value of Variable V is = ", V)
    fmt.Println("Address of variable V is = ", &V)
   
    fmt.Println("The Value of pt1 is = ", pt1)
    fmt.Println("Address of pt1 is = ", &pt1)
   
    fmt.Println("The value of pt2 is = ", pt2)
   
    // Dereferencing the 
    // pointer to pointer
    fmt.Println("Value at the address of pt2 is or *pt2 = ", *pt2)
       
    // double pointer will give the value of variable V
    fmt.Println("*(Value at the address of pt2 is) or **pt2 = ", **pt2)
}

Producción:

The Value of Variable V is =  100
Address of variable V is =  0x414020
The Value of pt1 is =  0x414020
Address of pt1 is =  0x40c128
The value of pt2 is =  0x40c128
Value at the address of pt2 is or *pt2 =  0x414020
*(Value at the address of pt2 is) or **pt2 =  100

Ejemplo 2: Hagamos algunos cambios en el programa anterior. Asignando algún valor nuevo a los punteros cambiando el valor de los punteros usando la desreferenciación como se muestra a continuación:

How Pointers Works In Go

// Go program to illustrate the
// concept of the Pointer to Pointer
package main
  
import "fmt"
  
// Main Function
func main() {
  
    // taking a variable
    // of integer type
    var v int = 100
  
    // taking a pointer
    // of integer type
    var pt1 *int = &v
  
    // taking pointer to
    // pointer to pt1
    // storing the address
    // of pt1 into pt2
    var pt2 **int = &pt1
  
    fmt.Println("The Value of Variable v is = ", v)
  
    // changing the value of v by assigning
    // the new value to the pointer pt1
    *pt1 = 200
  
    fmt.Println("Value stored in v after changing pt1 = ", v)
  
    // changing the value of v by assigning
    // the new value to the pointer pt2
    **pt2 = 300
  
    fmt.Println("Value stored in v after changing pt2 = ", v)
}

Producción:

The Value of Variable v is =  100
Value stored in v after changing pt1 =  200
Value stored in v after changing pt2 =  300

Publicación traducida automáticamente

Artículo escrito por Anshul_Aggarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *