Golang切片地址打印

2,055 阅读1分钟
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 )一个意思

参考:zhuanlan.zhihu.com/p/29753411