加餐|聊聊Go语言的指针
该思维导图由 AI 生成,仅供参考
什么是指针类型
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了Go语言中指针类型的概念和特点。通过详细的示例和解释,读者可以了解指针类型的声明、赋值和解引用操作,以及指针类型变量在内存中的存储方式。文章还讨论了指针变量的重新赋值和多个指针变量指向同一内存单元的情况。此外,文章还探讨了二级指针的概念和使用,以及指针在Go语言中的用途和使用限制。总的来说,本文为读者提供了深入了解Go语言中指针类型的使用和特性的基础知识。文章内容丰富,涵盖了指针类型的各个方面,对于想要深入学习和应用指针类型的读者来说,是一篇很有价值的文章。文章还提到了指针变量的声明与普通变量别无二异,指针变量的默认值为nil,以及Go语言对指针的使用做出的限制。建议读者在学完本文后回顾相关章节与实战项目,可能会有新的收获。
《Tony Bai · Go 语言第一课》,新⼈⾸单¥59
全部留言(15)
- 最新
- 精选
- 青鸟飞鱼看完整个专栏,只能说一句,老师来极客时间开专栏,太晚了,期待新课
作者回复: 感谢支持!
2022-03-0727 - ly看完老师的课,对go的喜欢又多了一分,老师能不能出一门实战的课,系统设计加代码实现,感觉就这一门看不过瘾
作者回复: 感谢支持👍。后续是否有课程,尚不确定:)
2022-03-0125 - xiaoru二级指针例子中foo函数返回会栈桢空间不是应该被回收吗?为什么还能取到b中的值?
作者回复: foo函数中的变量b不会被分配在栈上,会在堆上分配。这个go编译器会做逃逸分析(escape analysis)。
2022-03-174 - 五彩斑斓的輝指针无论是在 Go 中,还是在其他支持指针的编程语言中,存在的意义就是为了是“可改变”。在 Go 中,我们使用 *T 类型的变量调用方法、以 *T 类型作为函数或方法的形式参数、返回 *T 类型的返回值等的目的,也都是因为指针可以改变其指向的内存单元的值。 可改变,怎么理解啊?如果不用指针也是可以改变的吧?
作者回复: 这里可能表达不清。主要要表达的意思是通过指针传递参数与非指针传递参数的差别。非指针传递 改变的是拷贝,而不是原变量。
2022-05-2322 - lesserrortony bai 老师,文中的这句话:“如果我们需要跨函数改变一个指针变量的指向,我们就不能选择一级指针类型作为形参类型了。因为一级指针只能改变普通变量的值,无法改变指针变量的指向。” 没有太理解,我通过传递一个变量的指针到另外一个函数中,然后在另外一个函数中,用另一个变量的指针地址是可以赋值的,但是函数外,传递的变量的指针没有改变,不知道为什么? 这块能在解释一下么?
作者回复: 按照你的问题,写了一个例子: package main func foo(p *int) { var b int = 55 p = &b } func main() { var a int = 5 var p *int = &a println(*p) // 5 foo(p) println(*p) // 5 } 在这个例子中,main中的p和foo的参数p完全是两个不同函数栈上的变量,虽然foo参数p指向的也是main函数的变量a。 foo函数可以等价于: func foo() { var p *int var b int = 55 p = &b } foo的参数就等价于其函数内声明的本地变量。 所以foo内对p的修改,与main函数中的p并无关系。
2023-05-27归属地:广东1 - lesserrorTony bai 老师 ,文中有一处小错误。 在“多个指针变量可以指向同一个变量的内存单元的,这样通过其中一个指针变量对内存单元的修改,是可以通过另外一个指针变量的解引用反映出来的,比如下面例子:” 这段文字下面的代码中 : p2指向变量b所在内存单元 应该改为 p2指向变量a所在内存单元 的吧?
作者回复: 的确是笔误,后续让编辑老师修改一下,感谢指出。
2023-05-27归属地:广东1 - crazyball催更大白老师进阶或实战课~
作者回复: :)
2023-02-03归属地:广东1 - Elroy最开始看到课程的名字,误以为很基础,就随意翻了几篇感兴趣的看看,没想到干货满满,又从头看了一篇。讲的真好!
作者回复: 👍😄
2022-10-21归属地:北京1 - piboyego2 会把macro加回来吗?
作者回复: macro?go好像从来没有考虑加上macro。
2022-10-09归属地:北京1 - 心平气和期待白老师出一个实战课
作者回复: 嗯嗯。后续看是否有机会:)
2022-07-121