# 示例代码
```
func main() {
a := make([]byte, 0, 5)
a1 := append(a, 'a')
a2 := append(a, 'b')
fmt.Printf("a1=====> %s %p\n", a1, a1)
fmt.Printf("a2=====> %s %p\n", a2, a2)
fmt.Printf("a=====> %s %p\n", a, a)
}
```
# 打印结果
```
a1=====> b 0xc000072002
a2=====> b 0xc000072002
a=====> 0xc000072002
```
# 既然引用同一个数组,为什么a1 和 a2 只有“b”,而且a1、a2的值和a不同?
<a href="/user/zjh1315" title="@zjh1315">@zjh1315</a> <a href="/user/saberlong" title="@saberlong">@saberlong</a> 谢谢,明白了
#4
更多评论
理解slice的结构体就知道原因了。
a指向数组len为0
a1指向数组,append后, len为1,并且该位置为'a'
b1指向数组,append后, len为1,同时修改了该位置的值为'b'
打印时,因为a的len为0,所以为空。a1,b1的len为1,所以打印出'b'
#1
也就是说,a1操作后,起始底层数组已经是{'a'}, 只不过a的len=0的话,a只显示长度为0的值,所以和a1,a2显示长度为1的值不同。
而a2还是在len=0的a基础上添加值得所以就修改了a1 的"a"为"b"
#2