go言語トラップの11:配列を関数パラメータとする
725 ワード
これはC/C++の中のよくある問題で、配列が関数パラメータとして値を伝達するか、それとも参照を伝達するか、
コードexample:
本意は配列xを更新したいのですが、関数は値を伝達するので、関数体内で、1部のxをコピーしました.そのため、関数体内のデータデータが変化しただけで、データxデータを更新する目的を達成するには、配列ポインタを伝達して、よく知っています.
有木はよく知っている感じがします...
コード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を更新したいのですが、関数は値を伝達するので、関数体内で、1部の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]
}
有木はよく知っている感じがします...