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() { //정수 타입 변수 var V int = 100 //포인터를 가져옵니다 //의 정수 타입 var pt1 *int = &V //지정된 포인터를 가져옵니다 //pt를 가리킵니다1의 포인터 저장 주소 //pt1pt로 변환됩니다2 var pt2 **int = &pt1 fmt.Println("변수 V의 값은 = fmt.Println("변수 V의 주소는 = fmt.Println("pt1의 값은 =1) fmt.Println("pt1주소는 =1) fmt.Println("pt2의 값은 =2) //해제 //포인터의 포인터 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:위 프로그램에 대해 몇 가지 변경을 해보겠습니다. 포인터의 값을 변경하기 위해 해제를 사용하여 새 값을 할당하면 다음과 같습니다.:
// Go 프로그램을 통해 포인터가 포인터를 가리키는 개념을 설명합니다 package main import "fmt" func main() { // int 타입 변수 정의 var v int = 100 // 하나의 정수 타입의 포인터 var pt1 *int = &v //지정된 포인터를 가져옵니다 //pt를 가리킵니다1의 포인터 저장 주소 //pt1pt로 변환됩니다2 var pt2 **int = &pt1 fmt.Println("변수 v의 값은 = ", v) //v의 값을 변경하기 위해 대입을 통해 값을 변경합니다 //pt를 가리키는 포인터 pt1의 새 값 *pt1 = 200 fmt.Println("pt1v에 저장된 값 = ", v) //v의 값을 변경하기 위해 대입을 통해 값을 변경합니다 //pt를 가리키는 포인터 pt2의 새 값 **pt2 = 300 fmt.Println("pt2v에 저장된 값 = ", v) }
출력:
변수 v의 값은 = 100 pt를 변경합니다1v에 저장된 값 = 200 pt를 변경합니다2v에 저장된 값 = 300
관련 지식:Go 포인터