go基础-指针
2022/4/14 6:20:03
本文主要是介绍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用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。
这篇关于go基础-指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26go.mod的文件内容是什么?-icode9专业技术文章分享
- 2024-11-23MongoDB身份认证机制揭秘!
- 2024-11-20MongoDB教程:从入门到实践详解
- 2024-11-17执行 Google Ads API 查询后返回的是空数组什么原因?-icode9专业技术文章分享
- 2024-11-17google广告数据不同经理账户下的凭证可以获取对方的api数据吗?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼