>백엔드 개발 >Golang >Go 구조체의 메모리 주소에 어떻게 액세스하고 저장합니까?

Go 구조체의 메모리 주소에 어떻게 액세스하고 저장합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-29 13:37:25366검색

How Do I Access and Store the Memory Address of a Go Struct?

Go 구조의 메모리 주소 액세스 및 저장

프로그래밍, 특히 복잡한 데이터 구조의 경우 메모리 주소와 포인터의 동작을 이해하는 것이 중요합니다. Go 구조체와 같습니다. 이 기사에서는 구조체 주소 인쇄 및 조작의 미묘한 차이에 대해 자세히 설명합니다.

다음 Go 프로그램을 고려하세요.

type Rect struct {
 width int
 name int 
}

func main() {
 r := Rect{4,6}
 p := &r
 p.width = 15

fmt.Println("-----",&p,r,p,&r)
}

이 프로그램을 실행할 때 _____0x40c130 {15 형식의 출력을 볼 수 있습니다. 6} &{15 6} &{15 6}. 이 출력은 메모리 위치에 대한 통찰력을 제공하지만 r 변수의 주소를 명시적으로 표시하지는 않습니다.

r의 주소를 직접 인쇄하려면 fmt.Println(에서 사용하는 기본 형식을 우회해야 합니다. ). 대신 출력을 제어하기 위해 형식 문자열을 지정할 수 있습니다. %p 동사는 포인터와 주소를 인쇄하는 데 사용됩니다. fmt.Println() 줄을 다음과 같이 수정하면 r의 주소가 인쇄됩니다.

fmt.Printf("%p\n", &r)

이렇게 하면 r의 주소가 0x414020과 같은 16진수 형식으로 출력됩니다.

추가로, r의 주소를 변수에 저장하려면 다음을 사용할 수 있습니다. 구문:

addr := &r

이것은 r의 메모리 주소를 변수 addr에 할당합니다. 그런 다음 addr을 사용하여 Rect 구조에 포함된 값에 간접적으로 액세스하거나 수정할 수 있습니다.

포인터와 주소로 작업할 때 사용법을 완전히 이해하려면 컨텍스트와 목적을 고려하는 것이 중요합니다.

위 내용은 Go 구조체의 메모리 주소에 어떻게 액세스하고 저장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.