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

Tutoriales básicos de Golang

Instrucciones de control en Golang

Funciones y métodos en Golang

Estructuras en Golang

Cortes y arreglos en Golang

Cadenas (String) en Golang

Punteros en Golang

Interfaces en Golang

Concurrencia en Golang

Excepciones en Golang

Otras cosas de Golang

Puntero de puntero (doble puntero) en Go

En el lenguaje de programación Go, un puntero es una variable que almacena la dirección de memoria de otra variable. Un puntero es una variable especial, por lo que puede apuntar a cualquier tipo de variable. Básicamente, parece una cadena de punteros. Cuando definimos un puntero a puntero, el primer puntero se utiliza para almacenar la dirección del segundo puntero. Este concepto a veces se llamaPunteros dobles.

¿Cómo declarar un puntero a puntero en Golang?
declarar un puntero como Pointer, al igual que se declara un puntero en Go. La diferencia es que debemos poner un 'adicional antes del nombre del puntero * Normalmente, cuando usamosvar clavey la declaración de tipo de puntero variable se puede completar

Vamos a realizar algunos cambios en el programa anterior. Asignamos nuevos valores a los punteros utilizando la desreferencia, como se muestra a continuación:1El valor en la dirección deEn el siguiente programa, el punteropt2almacenadopt1Desreferenciapt2La dirección del puntero* pt2esvel valor dept1si intenta la dirección, o también se puede decir** pt2,Entonces se dará el valor de la variableves el valor de100.

Un programa de Go para explicar el concepto de puntero a puntero
package main
import \
    //Variable de tipo entero
    var V int = 100
    //Obtener un puntero
    //de tipo entero
    var pt1 *int = &V
    //int = &v
    //Obtener el puntero apuntado1Puntero a pt
    //Almacenar la dirección de puntero de pt1convertido a pt2
    var pt2 **int = &pt1
    fmt.Println("El valor de la variable V es = ", V)
    fmt.Println("La dirección de la variable V es = ", &V)
    fmt.Println("pt1su valor es = ", pt1)
    fmt.Println("pt1su dirección es = ", &pt1)
    fmt.Println("pt2su valor es = ", pt2)
    //Desreferencia
    //puntero a puntero
    fmt.Println("pt2El valor en la dirección de*pt2) = ", *pt2)
    //Los punteros dobles darán el valor de V
    fmt.Println("*(pt2) o **pt2 =", **pt2)
}

Salida:

El valor de la variable V es =  100
La dirección de la variable V es = 0xc000062090
pt1es = 0xc000062090
pt1La dirección es = 0xc00008c018
pt2es = 0xc00008c018
pt2El valor en la dirección de*pt2) = 0xc000062090
*(pt2) o **pt2 =  100

Vamos a realizar algunos cambios en el programa anterior. Asignamos nuevos valores a los punteros utilizando la desreferencia, como se muestra a continuación:2El valor en la dirección de:

// Ejemplo
Un programa de Go para explicar el concepto de puntero a puntero
package main
import \
    // func main() {
    Definir una variable de tipo int 100
    // var v int =
    var pt1 *Un puntero de tipo entero
    //int = &v
    //Obtener el puntero apuntado1Puntero a pt
    //Almacenar la dirección de puntero de pt1convertido a pt2
    var pt2 **int = &pt1
    fmt.Println("El valor de la variable v es = ", v)
    //para cambiar el valor de v mediante asignación
    //El puntero pt1nuevo valor
    *pt1 = 200
    fmt.Println("Cambiar pt1El valor almacenado en v es = ", v)
    //para cambiar el valor de v mediante asignación
    //El puntero pt2nuevo valor
    **pt2 = 300
    fmt.Println("Cambiar pt2El valor almacenado en v es = ", v)
}

Salida:

El valor de la variable v es  100
Cambiar pt1El valor almacenado en v es  200
Cambiar pt2El valor almacenado en v es  300

Conocimientos relacionados:Puntero de Go