go言語の配列ポインタへの参照
Go言語では配列は値型なので、引数として関数に渡す際は値のコピーが行われます。関数内で配列の内容を変更してその変更結果を保持する必要がある場合は、配列ポインタを使用します。
配列のアドレスを取得するには&記号を使用することができる。以下がその例である。
package main
import "fmt"
func modifyArray(arr *[3]int) {
(*arr)[0] = 10
(*arr)[1] = 20
(*arr)[2] = 30
}
func main() {
arr := [3]int{1, 2, 3}
fmt.Println("Before:", arr)
modifyArray(&arr)
fmt.Println("After:", arr)
}
上のコードでは、modifyArray 関数は配列へのポインタを受け取り、ポインタの参照解除によって配列の値を変更します。main 関数では、&arr を使用して配列のアドレスを modifyArray 関数に渡します。
「結果が得られる」ということを日本語で言い換えると?
Before: [1 2 3]
After: [10 20 30]
モディファイして関数で配列の値を変更すると、それはメイン関数で見えることがわかります。
Go言語では配列長は配列型の一部であることに注意し、配列のポインタ型は*[長]型になります。また、関数引数でも配列長を指定する必要があります。