go基础-指针

# 指针

go语言中的指针不能进行偏移量和运算

Go语言中的指针操作非常简单只需要记住两个操作符:&(取地址)和*(根据地址取值)

a := 1 // 每个变量都会有一个内存地址
b := &a // 这个就是吧变量a的地址给变量b,这时候b的值类似于这样:0x14000124008
c := *b // *就是取值,也就是现在c的值也是1
fmt.Println(*a) // 这是错误的 'a' (类型 'int')的间接引用无效

指针传值

func m1(a int) {
a = 100
}
func m2 (a *int) {
*a = 10
}
b := 1
m1(b)
fmt.Println(b) // 1
m2(&b)
fmt.Println(b) // 10

空指针

当一个指针被定义后没有分配到任何变量时,它的值为 nil

var a *string
fmt.Println(a) // nil
fmt.Printf("a的值是%v\n", a) // a的值是<nil>

判断是不是空指针

if a == nil {
fmt.Println("空指针")
} else {
fmt.Println("非空指针")
}

使用new和make创建指针

// new 是一个内置的函数
a := new(int) // 声明一个指针变量
b := new(bool)
fmt.Printf("%T\n", a) // *int
fmt.Printf("%T\n", b) // *bool
fmt.Println(*a) // 0
fmt.Println(*b) // false
*a := 10 // 赋值
fmt.Pringln(*a) // 10
// make也是用于内存分配的,区别于new,它只用于slice、map以及chan的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型
b := make(map[string]int, 10)
b["嗨害嗨"] = 100
fmt.Println(b) // map[嗨害嗨:100]

new和make的区别

  • make只用于slice、map以及channel的初始化,返回的还是这三个引用类型本身;

  • new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。

posted @   颖小主  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示