English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Указатель в языке программирования Go - это переменная, которая хранит адрес другой переменной. Указатель - это специальная переменная, поэтому он может указывать на переменную любого типа. В основном, это выглядит как цепочка указателей. Когда мы определяем указатель на указатель, первый указатель используется для хранения адреса второго указателя. Этот концепция иногда называетсяДвойные указатели.
Как объявить указатель на указатель в Golang?
указатель объявляется как Pointer, как в Go, объявляя указатель. Разница в том, что我们必须 поместить дополнительную ' перед именем указателя * «. Обычно, когда мы используемключевое слово varи тип указателя переменной, можно выполнить эту операцию.
Пример 1:В следующем примере программы, указательpt2хранениеpt1адрес указателя. Разыменованиеpt2то есть* pt2будет предоставлен переменнаяvадрес, или вы также можете сказать указательpt1Значение. Если вы пытаетесь** pt2,тогда будет предоставлен переменнаяvЗначение, равное 100.
package main import "fmt" func main() { //Переменная типа int var V int = 100 //Получение указателя //Тип int var pt1 *int = &V //Получение указателя //Адрес указателя, на который указывает pt1 //Преобразование pt1 в pt2 var pt2 **int = &pt1 fmt.Println("Значение переменной V = ", V) fmt.Println("Адрес переменной V = ", &V) fmt.Println("Значение pt1 = ", pt1) fmt.Println("Адрес pt1 = ", &pt1) fmt.Println("Значение pt2 = ", pt2) //Дерференсинг //Указатель на указатель fmt.Println("Значение адреса pt2 ( *pt2 ) = ", *pt2) //Двойной указатель даст значение переменной V fmt.Println("*(адрес, содержащий значение pt2) или **pt2 = ", **pt2) }
Вывод:
Значение переменной V = 100 Адрес переменной V = 0xc000062090 Значение pt1 = 0xc000062090 Адрес pt1 = 0xc00008c018 Значение pt2 = 0xc00008c018 Значение адреса pt2 ( *pt2 ) = 0xc000062090 *(адрес, содержащий значение pt2) или **pt2 = 100
Пример 2:Давайте внесем некоторые изменения в上面的 программу. Изменяем значения указателей, используя dereferencing для назначения новых значений, как показано ниже:
//Пример Go-программы для объяснения концепции указателей на указатели package main import "fmt" func main() { //Определение переменной типа int var v int = 100 //Указатель на тип int var pt1 *int = &v //Получение указателя //Адрес указателя, на который указывает pt1 //Преобразование pt1 в pt2 var pt2 **int = &pt1 fmt.Println("Значение переменной v равно ", v) //Изменение значения v через присваивание //Новое значение для указателя pt1 *pt1 = 200 fmt.Println("Значение, хранящееся в v после изменения pt1, равно ", v) //Изменение значения v через присваивание //Новое значение для указателя pt2 **pt2 = 300 fmt.Println("Значение, хранящееся в v после изменения pt2, равно ", v) }
Вывод:
Значение переменной v равно 100 Значение, хранящееся в v после изменения pt1, равно 200 Значение, хранящееся в v после изменения pt2, равно 300
См. также:相关知识Указатели в Go