
package main import "fmt" func main() { s1 := []byte{1, 2, 3} s2 := []byte{4, 5} fmt.Println(AppendByte(s1, s2...)) fmt.Println(s1) } func AppendByte(slice []byte, data ...byte) []byte { //slice[0]=111 // 引用传递,会修改原 slice m := len(slice) n := m + len(data) if n > cap(slice) { newSlice := make([]byte, (n+1)*2) copy(newSlice, slice) slice = newSlice //问题:上面这个 slice 是新开辟的内存空间?已经原始原来的那个 slice 的内存空间了,是吧~? fmt.Println(&slice) //我想比较 slice 的地址,可是输出的是&[1 2 3 0 0 0 0 0 0 0 0 0],怎么输出 0xc42000e1d0 这种类型的? } slice = slice[0:n] //最左边的这个 slice 的内存空间是不是也新开辟的 fmt.Println("slice:", slice) copy(slice[m:n], data) fmt.Println("slice2", slice) return slice } 1 Flygar OP 爱你们,快帮帮这个失了智的楼主。 |
2 current 2018-05-25 00:21:48 +08:00 1. 是的 2. fmt.Printf("%p", &slice) 3. 不是 |
3 Flygar OP 我勒个擦 ```go fmt.Println(&slice) fmt.Printf("%p", &slice) ``` |