packagemain
import"fmt"
funcmain() {
    slic := []int{1, 2, 3}
    // len(cp) = 3, cap(cp) = 3
    cp := make([]*int, len(slic))
    fori, x := rangeslic {
        cp[i] = &slic[i]
        cp = append(cp, &x)
    }
    // 第一次循环
    // cp[0] = &slic[0]  *cp[0] = 1
    // 由于len=cap=3,append方法的作用是将元素追加到切片的末尾,即cp(len)位置,此时append便超过切片容量,切片进行扩容,将容量扩容2倍(切片容器<1024时,扩容*2)。
    // append后相当于 cp[3] = &x  此时x的值为1,len(cp)=4, cap(cp)=6
    // 第二次循环
    // cp[1] = &slic[1]  *cp[1] = 2
    // 再次append相当于 cp[4] = &x 此时x的值为2,len(cp)=5, cap(cp)=6
    // 第三次循环
    // cp[2] = &slic[2]  *cp[2] = 3
    // 再次append相当于 cp[5] = &x 此时x的值为3,len(cp)=6, cap(cp)=6
    // 至此循环完毕,cp中数据为  &slic[0]  &slic[1] &slic[2] &x  &x  &x
      println("len==", len(cp), "  cap==", cap(cp))
      for_, x := rangecp {
        fmt.Print(*x, " ")
      }
}
/*  输出结果
    len== 6   cap== 6
    1 2 3 3 3 3
*/