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 }
引用傳遞
#如果將指標位址作為值傳遞給函數,則函數將獲得對原始指標的引用。對該引用所做的任何更改都會影響原始指標。
程式碼範例:
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中文網其他相關文章!