func main() {
s1 := make([]int, 3, 5)
fmt.Printf("s1: %p\n", s1) //0xc0000123f0 切片指向数组地址
fmt.Printf("&s1: %p\n", &s1) //0xc0000044a0 切片本身地址
fmt.Printf("&s1[0]: %p\n", &s1[0]) //0xc0000123f0 切片指向数组地址
var a int= 20
var ip *int //声明指针变量
ip = &a
fmt.Printf("a 变量的地址是: %p\n", &a ) //a 变量的地址是: 0xc00000a0c0
fmt.Printf("ip 变量储存的指针地址: %p\n", ip ) //ip 变量储存的指针地址: 0xc00000a0c0
fmt.Printf("*ip 变量的值: %d\n", *ip ) //*ip 变量的值: 20
t := 100
fmt.Printf("t: %p\n", t) // %!p(int=100) 【警告】
fmt.Printf("&t: %p\n", &t) //0xc00000a0c8
}
切片的结构体由3部分构成,Pointer 是指向一个数组的指针,len 代表当前切片的长度,cap 是当前切片的容量。所以可以直接这样写(不写&):fmt.Printf("s1: %p\n", s1)
和fmt.Printf("ip 变量储存的指针地址: %p\n", ip )
一个意思