美文网首页
go语言值传递与指针传递

go语言值传递与指针传递

作者: Ucan先生 | 来源:发表于2018-07-27 17:22 被阅读0次

    go语言指针

    go语言作为静态编译型语言,具有指针类型,但是不提供对指针的移位危险操作,防止指针的越界等问题。

    go语言的指针的值复制与地址复制

    数组

    作为函数参数调用和复制均为值传递

    package main
    import "fmt"
    
    //测试go语言数组slice调用时进行值传递还是地址传递
    值传递
    func main()  {
        arr:= [5]int{1,2,3,4,5}
        test(arr)
        fmt.Println(arr)
    }
    
    func test(arr [5]int)  {
        arr[0] += 5
    }
    

    地址传递

    func main()  {
        arr:=[5]int{1,2,3,4,5}
        test(&arr)
        fmt.Println(arr)
    }
    
    func test(arr *[5]int)  {
        arr[0]+=5
    }
    
    slice

    slice直接赋值和地址赋值都为指针操作

    //slice的值传递与地址传递
    func main()  {
        arr := [5]int{1,2,3,4,5}
        slice := arr[0:5]
        test(slice)
        fmt.Println(slice)
        fmt.Println(arr)
    }
    
    func test(s []int)  {
        s[0] += 5
    }
    

    上下两种类似

    
    func main()  {
        arr := [5]int{1,2,3,4,5}
        slice := arr[0:5]
        test(&slice)
        fmt.Println(slice)
        fmt.Println(arr)
    }
    
    func test(s *[]int)  {
        (*s)[0] += 5
    }
    

    相关文章

      网友评论

          本文标题:go语言值传递与指针传递

          本文链接:https://www.haomeiwen.com/subject/rypgmftx.html