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