Go에는 포인터 유형 매개변수를 전달하는 두 가지 방법이 있습니다. 값 전달: 함수는 포인터의 복사본을 얻고 복사본에 대한 변경 사항은 원래 포인터에 영향을 주지 않습니다. 참조로 전달: 함수는 원래 포인터에 대한 참조를 얻고 참조에 대한 변경 사항은 원래 포인터에 영향을 미칩니다.
Go 포인터 유형 매개변수 전달 메커니즘
Go에서는 포인터 유형 매개변수가 값 전달과 참조 전달이라는 두 가지 방법으로 함수에 전달됩니다.
값으로 전달
포인터 값을 함수에 값으로 전달하면 함수는 포인터의 복사본을 가져옵니다. 이 복사본에 대한 변경 사항은 원본 포인터에 영향을 주지 않습니다.
코드 예:
package main import "fmt" func changeValue(ptr *int) { *ptr = 10 } func main() { ptr := new(int) *ptr = 5 fmt.Println(*ptr) // 输出: 5 changeValue(ptr) fmt.Println(*ptr) // 输出: 5 }
Pass by reference
포인터 주소를 함수에 값으로 전달하면 함수는 원래 포인터에 대한 참조를 얻습니다. 이 참조에 대한 모든 변경 사항은 원래 포인터에 영향을 미칩니다.
코드 예:
package main import "fmt" func changePointer(ptr **int) { *ptr = new(int) **ptr = 10 } func main() { ptr := new(int) *ptr = 5 fmt.Println(*ptr) // 输出: 5 changePointer(&ptr) fmt.Println(*ptr) // 输出: 10 }
실용 사례
다음 실제 사례에서는 값 전달 및 참조 전달을 사용하여 간단한 연결 목록을 구현합니다.
값으로 전달을 사용하여 연결 목록 구현:
type Node struct { value int next *Node } func createList(values []int) *Node { head := &Node{value: values[0]} current := head for _, v := range values[1:] { next := &Node{value: v} current.next = next current = next } return head } func printList(head *Node) { for current := head; current != nil; current = current.next { fmt.Printf("%d ", current.value) } fmt.Println() } func main() { values := []int{1, 2, 3, 4, 5} head := createList(values) printList(head) // 输出: 1 2 3 4 5 }
참조로 전달을 사용하여 연결 목록 구현:
type Node struct { value int next **Node } func createList(values []int) *Node { head := &Node{value: values[0]} current := head for _, v := range values[1:] { next := &Node{value: v} *current.next = next current = next } return head } func printList(head *Node) { for current := head; current != nil; current = *current.next { fmt.Printf("%d ", current.value) } fmt.Println() } func main() { values := []int{1, 2, 3, 4, 5} head := createList(values) printList(head) // 输出: 1 2 3 4 5 }
첫 번째 예에서는 값으로 전달을 사용하여 연결 목록을 만듭니다. 두 번째 예에서는 참조별 전달을 사용하여 연결 목록을 만듭니다. 실행 결과는 동일하지만 참조로 전달하는 경우 함수에서 연결 리스트의 순서를 수정할 수 있습니다.
위 내용은 Go 포인터 유형 매개변수 전달 메커니즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!