go语言陷阱之十一:数组作为函数参数

2015-07-25  本文已影响1050人  wu_sphinx

这是C/C++里面的常见问题了,数组作为函数参数时是传值还是传引用,

代码example:

package main

import "fmt"

func main() {
    x := [3]int{1, 2, 3}

    func(arr [3]int) {
        arr[0] = 7
        fmt.Println(arr) //prints [7 2 3]
    }(x)

    fmt.Println(x) //prints [1 2 3] (not ok if you need [7 2 3])
}

本意是想更新数组x,但是因为函数是传值,在函数体内,复制了一份x,因此仅仅是函数体内的数据数据发生了变化,要想达到更新数据x数据目的,传数组指针,好生熟悉:

package main

import "fmt"

func main() {
    x := [3]int{1, 2, 3}

    func(arr *[3]int) {
        (*arr)[0] = 7
        fmt.Println(arr) //prints &[7 2 3]
    }(&x)

    fmt.Println(x) //prints [7 2 3]
}

有木有好熟悉的感觉...

上一篇 下一篇

猜你喜欢

热点阅读