273-golang指针浅析








golang指针浅析






我们先来看一段简单的代码

func main() {

	person := Person{"Alice", 20}
	fmt.Printf("%p\n", &person)

	p1 := &person
	fmt.Printf("%p\n", p1)
	fmt.Printf("%p\n", &p1)

}

type Person struct {
	name string
	age  int
}



输出结果为
0xc000004440
0xc000004440
0xc000006030



我们定义了person变量
&是取地址符,所以&person表示地址,也表示指针
然后格式化打印出person在内存中地址

然后定义了p1变量,为&person,也就是person的指针
然后打印p1变量指向的地址
然后打印p1变量自身的地址






我们可以这样理解
person的内容在内存中占据了一块空间
这块空间的地址为0xc000004440
这块空间里面保存了
person的内容,包括name和age

person指向这块空间,这块空间的地址为0xc000004440

然后又来了一个变量p1
p1的内容在内存中占据了一块空间
这块空间的地址为0xc000006030
这块空间里面保存了
的内容是person的地址0xc000004440







所以实际上
变量只是一个别名而已
只是一块内存地址的别名

0xc000004440的别名为person
里面保存了person的内容包括name,age

0xc000006030的别名为p1
里面保存了0xc000004440
也就是person的内存地址







同样的道理
	p2 := &p1
	fmt.Printf("%p\n", p2)
	fmt.Printf("%p\n", &p2)

打印结果为
0xc000006030
0xc000006038

0xc000006038的别名为p2
里面保存了0xc000006030
也就是p1的内存地址







 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值