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

Tutorial básico do Golang

Sentenças de controle no Golang

Função & Método no Golang

Estrutura no Golang

Fatia & Array no Golang

Cadeia de caracteres (String) no Golang

Ponteiro no Golang

Interface no Golang

Concorrência no Golang

Exceções no Golang (Error)

Diversos itens do Golang

Ponteiro de ponteiro (duplo ponteiro) em Go

Um ponteiro em linguagem Go é uma variável usada para armazenar o endereço de memória de outra variável. Um ponteiro é uma variável especial, então ele pode apontar para qualquer tipo de variável. Basicamente, isso parece uma cadeia de ponteiros. Quando definimos um ponteiro para ponteiro, o primeiro ponteiro é usado para armazenar o endereço do segundo ponteiro. Esse conceito às vezes é chamado dePonteiro duplo.

Como declarar um ponteiro para ponteiro em Golang?
Para declarar um ponteiro como Pointer, semelhante à declaração de ponteiros em Go. A diferença é que devemos colocar um caractere adicional antes do nome do ponteiro * Normalmente, quando usamosChavevar

Exemplo1:e a declaração do tipo do ponteiro ao declarar o ponteiro variável, você pode completar essa operação.pt2No programa abaixo, o ponteiropt1Armazenadopt2Desreferenciação* pt2O endereço do ponteirovou você também pode dizer que é umpt1Se tentar o endereço** pt2,Então fornecerá a variávelvé o valor de100.

package main
import "fmt"
func main() {
    //Variável do tipo inteiro
    var V int = 100
    //Obter um ponteiro
    //do tipo inteiro
    var pt1 *int = &V
    //Obter o ponteiro apontado
    //Ponteiro para pt1O endereço de ponteiro de pt
    //Armazenar o endereço de ponteiro de pt1Converter para pt2
    var pt2 **int = &pt1
    fmt.Println("O valor da variável V é = ", V)
    fmt.Println("O endereço da variável V é = ", &V)
    fmt.Println("pt1é = ", pt1)
    fmt.Println("pt1O endereço é = ", &pt1)
    fmt.Println("pt2é = ", pt2)
    //Desreferenciação
    //Ponteiro para ponteiro
    fmt.Println("pt2O valor no endereço*pt2) = ", *pt2)
    //Dois ponteiros fornecerão o valor da variável V
    fmt.Println("*(pt2O valor no endereço **pt2 =", **pt2)
}

Saída:

O valor da variável V é =  100
O endereço da variável V é = 0xc000062090
pt1é = 0xc000062090
pt1O endereço é = 0xc00008c018
pt2é = 0xc00008c018
pt2O valor no endereço*pt2) = 0xc000062090
*(pt2O valor no endereço **pt2 =  100

Exemplo2:Vamos fazer algumas alterações no programa acima. Através do uso de desreferenciação para alterar o valor do ponteiro, atribuímos novos valores ao ponteiro, conforme mostrado a seguir:

// Um programa em Go para explicar o conceito de ponteiros apontando para ponteiros
package main
import "fmt"
func main() {
    // Definir uma variável do tipo int
    var v int = 100
    // Um ponteiro do tipo inteiro
    var pt1 *int = &v
    //Obter o ponteiro apontado
    //Ponteiro para pt1O endereço de ponteiro de pt
    //Armazenar o endereço de ponteiro de pt1Converter para pt2
    var pt2 **int = &pt1
    fmt.Println("O valor da variável v é = ", v)
    //Alterar o valor de v por meio de atribuição
    //O ponteiro pt1novo valor
    *pt1 = 200
    fmt.Println("Alterar pt1O valor armazenado em v é = ", v)
    //Alterar o valor de v por meio de atribuição
    //O ponteiro pt2novo valor
    **pt2 = 300
    fmt.Println("Alterar pt2O valor armazenado em v é = ", v)
}

Saída:

O valor da variável v é  100
Alterar pt1O valor armazenado em v é  200
Alterar pt2O valor armazenado em v é  300

Conhecimento Relacionado:Ponteiro do Go