golang 打印变量地址_golang 变量 取地址符 指针

本文探讨了Golang中变量地址的概念,通过比喻解释了如何使用指针来访问和修改变量的值。指针允许程序员高效地操作内存,但也需要遵循一定的规则以避免不必要的风险。文中通过一个家庭地址的例子,展示了指针如何代表内存中的位置,并讨论了不同指针变量指向同一内存地址的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机内存就像土地,都是被规划好的。像我家就是一个门牌号25号。张三家就占了三个地址26-28号,有那么一些带π。

我们平时说张三家,都不会说门牌号,编程也是一样:

var 张三家 = "房子、车子、电视、洗衣机..."

这里我们就省略了张三家的地址。实际上张三家代表的就是“西城区青年北路26-28号”这个地址,如果更较真说先后顺序,那是先有这个地址,我们为了方便才给这个地址取个名字,这个名字就是变量。

如果你说要问张三家地址是啥,复杂的样子就是

获取地址(张三家) // 返回一个张三家地址// 实际上地址还隐含着某种方位感,只是我们不提,用导航软件

操作麻烦我们就改一下,懒嘛

// &变量// &variablepoint_张三家 := &张三家

这种能找到某家房子(空间)的东西,我们起个专业术语叫做指针(pointer)。张三家富裕你想去他家捞点东西,对他们家的东西,车,电视啥的进行操作。

*point_张三家

0352649569fe3446b64d29edd5e078db.png

具体是打车去看的,还是百度导航跑着去的,还是自己开车去的,这都不重要。重要的是*point就代表了跑人家里了,是个二哈还可能把人家拆了。

正常情况下人家对你这个人开放什么,你就只能做什么。不能瞎捣鼓。如果张三家是一个只放鱼的冷库,你就只能去存鱼,或者是拿鱼。你要去种麦子那就不行。

那你说我一定要在张三家种麦子,也不是不行,但是咱们有些能力就要深挖才能实现。毕竟这个世界的规则限制了我们,我们程序的规则也是限制着我们。

package mainimport (  "fmt"  "reflect")func main() {  var zhangSanHome = "房子 车子 电视 电脑"  fmt.Println(reflect.TypeOf(zhangSanHome), zhangSanHome)  // string 房子 车子 电视 电脑  // 获取张三家的地址指针  zhangSanHomePoint := &zhangSanHome  fmt.Println(reflect.TypeOf(zhangSanHomePoint), zhangSanHome)  // *string 房子 车子 电视 电脑  // 再取值  zhangSanHomePointValue := *zhangSanHomePoint  fmt.Println(reflect.TypeOf(zhangSanHomePointValue), zhangSanHomePointValue)  // string 房子 车子 电视 电脑  // 我们捣鼓了一圈 *(&var) 我们又回来了}

感觉跟勺子一样饶了一圈,有啥用?

脱离场景谈病情都是耍流氓

这个还没现实中的例子,假设张三有个弟弟,暂时叫他三弟,他们拥有共同的家;

  // 张三的弟弟  sanDi := zhangSanHome  fmt.Println(reflect.TypeOf(sanDi), sanDi, &sanDi)  fmt.Println(reflect.TypeOf(sanDi), zhangSanHome, &zhangSanHome)  // string 房子 车子 电视 电脑 0xc000010260  // string 房子 车子 电视 电脑 0xc000010200

但是你发现,他们的地址都不一样。这种做法没有享受兄弟间的福利,也没有带来额外的风险。

  sanDi = "房子 车子 电视 电脑 空气净化器"  zhangSanHome = "房子 车子 电视 电脑 燃气泄漏了"  fmt.Println(reflect.TypeOf(sanDi), sanDi, &sanDi)  fmt.Println(reflect.TypeOf(sanDi), zhangSanHome, &zhangSanHome)  //string 房子 车子 电视 电脑 空气净化器 0xc000010260  //string 房子 车子 电视 电脑 燃气泄漏了 0xc000010200

逻辑上共同一个家不存在,所以?

  // 张三夫妇  zhangSanWifePoint := &zhangSanHome  fmt.Println(reflect.TypeOf(zhangSanWifePoint), *zhangSanWifePoint, zhangSanWifePoint)  fmt.Println(reflect.TypeOf(zhangSanHomePoint), *zhangSanHomePoint, zhangSanHomePoint)  //*string 房子 车子 电视 电脑 燃气泄漏了 0xc000010200  //*string 房子 车子 电视 电脑 燃气泄漏了 0xc000010200

张三夫妇都是指针类型,指向同一个“家”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值