fmt.Scanln の前後で、引数に入れたスライスのサイズが変わったのにも関わらず、参照先アドレスが変わらず、かつ入力した文字数に応じてサイズが1つずつ増えていく、append とは異なった挙動をする理由を教えていただけないでしょうか。append を使わないとしたらどのようにスライスのサイズを変えているのでしょうか。参照先が変わらないとした場合、アドレスが衝突したりしないのでしょうか?
go
1package main 2 3import ( 4 "fmt" 5) 6 7func main() { 8 buf := make([]byte, 1) 9 fmt.Printf("Address:%p, Size:%v, Values: %v\n", &buf, len(buf), buf) 10 fmt.Scanln(&buf) 11 fmt.Printf("Address:%p, Size:%v, Values: %v\n", &buf, len(buf), buf) 12}
$ go version go version go1.17.2 linux/amd64 //1 文字 $ go run . Address:0xc0000ac018, Size:1, Values: [0] a Address:0xc0000ac018, Size:1, Values: [97] //2 文字 $ go run . Address:0xc00000c030, Size:1, Values: [0] aa Address:0xc00000c030, Size:2, Values: [97 97] //3 文字 $ go run . Address:0xc0000ac018, Size:1, Values: [0] aaa Address:0xc0000ac018, Size:3, Values: [97 97 97]
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/28 09:20