これがコードです:
package main
import (
"fmt"
)
type demo struct {
name string
}
func main() {
demo_slice := make([]demo, 3)
demo_slice[0] = demo{"str1"}
demo_slice[1] = demo{"str2"}
demo_slice[2] = demo{"str3"}
point_demo_slice := make([]*demo, 3)
for index, value := range demo_slice {
fmt.Printf("\n%v==++++++++++++++%p\n", value, &value)
point_demo_slice[index] = &value
}
}
結果:
{str1}==++++++++++++++0x20818a220
{str2}==++++++++++++++0x20818a220
{str3}==++++++++++++++0x20818a220
0x20818a220
最後の要素のポインタ値です。
なぜすべてのポインター値が同じですか?
どうすればこれらの正しいポインター値を取得できますか?
スライスの要素ではなく、ローカルvalue
変数を参照しています。
fmt.Printf("\n%v==++++++++++++++%p\n", value, &value)
したがって、すべてのポインター値は同じになります(ローカル変数のアドレスvalue
)。スライスの要素へのポインタが必要な場合は、適切な要素のアドレスを取得します。
fmt.Printf("\n%v==++++++++++++++%p\n", demo_slice[index], &demo_slice[index])
これにより、次の出力が生成されます。すべてのポインターは異なります。
{str1}==++++++++++++++0x104342e0
{str2}==++++++++++++++0x104342e8
{str3}==++++++++++++++0x104342f0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加