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.
// 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:
// 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