go语言值传递与指针传递

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语言值传递与指针传递)