第一部分:指针?先别怕,就是找个“家庭住址”!
每次听到“指针”这两个字,很多编程新手就开始头皮发麻,仿佛遇到了编程生涯中的第一大敌。别紧张,今天咱们就用最接地气的方式,把这个看似高深的概念拆解明白。
想象一下,你点了一份外卖,外卖小哥问你:“您好,您家住哪儿?”你回答说:“XX小区XX栋XX单元XX室”。这个地址,其实就是你在现实世界中的“指针”——它不包含你家具体长什么样,但能准确告诉别人去哪里找到你。
在Go语言的世界里,每个变量也都住在内存这个“大城市”里,它们都有自己的“家庭住址”,也就是内存地址。而&操作符,就是帮我们获取这个地址的“地址查询器”。
为什么需要知道变量的地址?
当你传递一个变量给函数时,Go默认会创建这个变量的一个副本。想象一下,如果你要把一本厚达500页的书给朋友看,你是选择:
- 把整本书复印一份给他(值传递)
- 还是直接告诉他:“书在我家书架上,地址是XXX,你自己来看”(指针传递)
显然,第二种方式更高效,特别是当这本书很厚重的时候。在编程中,当我们需要操作大型数据结构或者希望在函数内部修改外部变量时,指针就派上了大用场。
第二部分:&操作符初体验:原来这么简单!
在Go语言中,取地址操作简单到令人发指——只需要在变量前面加上&符号就可以了。
package main
import "fmt"
func main() {
// 创建一个普通变量
myHouse := "三室一厅,带阳台"
// 获取myHouse的地址(指针)
houseAddress := &myHouse
fmt.Println("我的房子配置:", myHouse)
fmt.Println("我的房子地址:", houseAddress)
fmt.Printf("地址的类型是:%T\n", houseAddress)
}
运行结果:
我的房子配置: 三室一厅,带阳台
我的房子地址: 0xc000010200
地址的类型是:*string
看到那个以0x开头的奇怪数字了吗?这就是内存地址的“身份证号”,用十六进制表示。每次运行程序,这个地址可能会不一样,因为变量被分配到了内存的不同位置。
指针类型的小秘密
注意到输出中的*string了吗?这就是指针类型的表示方式:
*string:指向string类型的指针*int:指向int类型的指针*float64:指向float64类型的指针
简单来说,就是在原有类型前面加个*号。</

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



