最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • Go指针类型的参数传递机制

    go 指针类型参数传递有两种方式:值传递:函数获得指针副本,对副本的更改不影响原始指针。引用传递:函数获得对原始指针的引用,对引用的更改影响原始指针。

    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
    }

    在第一个示例中,我们使用值传递创建链表。在第二个示例中,我们使用引用传递创建链表。执行结果都是相同的,但使用引用传递时,我们可以在函数中修改链表的顺序。

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » Go指针类型的参数传递机制
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 292稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情