15 | 关于指针的有限操作
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文深入讨论了Go语言中指针操作的相关概念和操作。首先介绍了指针类型及其对应的指针值,以及指针方法的概念。文章列举了不可寻址的值的类型及其限制,并介绍了通过`unsafe.Pointer`操纵可寻址的值的技术。强调了使用非正常编程手段的危险性,需要谨慎对待。总结部分重点强调了可寻址值的重要性和不可寻址值的限制,以及`unsafe.Pointer`类型和`uintptr`类型的潜在风险。读者可以通过本文快速了解Go语言中指针操作的相关概念和操作,以及需要注意的安全隐患。
《Go 语言核心 36 讲》,新⼈⾸单¥59
全部留言(53)
- 最新
- 精选
- 郝林置顶大家可以具体说说有哪些名词需要用示例解释?2019-06-03112
- jacke字面量有人理解吗?求解释
作者回复: 说白了就是用于表示值或者类型的代码段。比如:1234就是代表整数值的字面量,int64就是代表类型的字面量。很简单,不用想的太复杂。
2018-10-13533 - 静水流深老师您好,引用类型的值的指针值,是否可以理解为指针的指针?
作者回复: 你最好不要这么理解,否则会影响其他地方的理解。引用类型的值不是指针那么简单,它本身是有结构的,所以还是要按普通的值来理解,不要理解成指针。
2019-07-1819 - Geek_a8be59根据您说的 由于 Go 语言中的字符串值也是不可变的 var a = "123" var c = "123" fmt.Printf("a fist is %p\n",&a) a = "456" fmt.Printf("a two is %p \n",&a) b:=a fmt.Printf("a three is %p \n",&a) fmt.Printf("b is %p \n",&b) 我想问的是 ①这里的“123”和“456”值不可变,那是不是他们两个都是在常量区呢?我不清楚是不是有go有常量区这②如果字符串的值是不可变的,那么c和a的字符串的值的地址是一样的呢? ③那为什么&a != & c呢,这里是取的字面量a的地址么?是不是可以理解成*a才是真正字符串“123”的地址呢
作者回复: 1. Go 语言没有常量区这个概念。 2. 你要分清楚变量和值啊。变量本身的存储中包含了值,但不限于值。变量可以拥有或者代表一个值,但是它本身并不是值啊。 3. 你无法获取值 "123" 和 "456" 本身的存储地址,因为 Go 语言规范规定这样的值本身是不可取址的。 你可以参考 Go 运行时系统中对 string 结构的定义: type stringStruct struct { str unsafe.Pointer len int } 这个声明所在文件的路径是:/src/runtime/string.go 。
2019-07-02310 - 有铭C里的指针是用来直接操作内存的,因为C里有大量的操作是必须靠操作内存完成的。那么go这种带有GC,不需要手动分配内存的语言,指针存在的意义在哪里呢,Go里的指针在何时有“不得不使用”的意义呢?
作者回复: 没有非得使用的必要。指针类型及其值最常用,因为可以达到传址的效果。
2018-09-1429 - 浩前面分类介绍那里,我感觉很绕,比如说,切片字面量的索引结果值,没看太懂,切片字面量是切片这个变量名称呢还是切片变量指向的值,索引结果值,是切片中索引指向的数据吗?还是这个索引本身的值呢?
作者回复: 字面量,就是用来表示值本身的东西,比如:[]int32{1,2,3} 、"abc"等。索引结果值说全了是索引表达式的结果值,就是与给定的索引号对应的那个元素值。关于这些概念性名词,我记得都在文章里正面或侧面的解释过。如果你还有哪些不太明白,可以发评论问我。
2019-08-155 - Michael“引用类型的值得指针值” 同C语言中 “指针的指针” 应该是一个概念; 假设,有一个值类型 T,那么类型T的引用类型就是:*T,引用类型值得指针值类型就是:**T。 var t = T{} // T var pt = &T // *T var ppt = &pt // **T 但是具体的意义与使用场景还没想到,也没有遇到过,若老师不嫌弃,还请老师指出
作者回复: 在Go需要中所谓的指针的指针最好不要用,Go也是想避免这种复杂性才搞出来引用类型的。
2018-09-175 - AlanNew("little pig").SetName("monster") 这个应该看版本的吧,在1.13.5版本中是可以的
作者回复: 这个是基本的规则,哪个版本都是一样的。
2020-01-0233 - Realm1 “引用类型的值的指针 ”与 “引用类型的值的值指针”是两个概念? 2 值的值指针是类似切片、字典、通道内的元素的指针吗? 如果是,那老师的思考题,引用类型的值的值指针的意义:是不是用此指针来取元素的值?
作者回复: 我没说过“值指针”这个词。“引用类型的值的指针值”的含义你不理解还是?
2018-09-1423 - undifined老师 有一点没有理解,namePtr := dogPtr + unsafe.Offsetof(dogP.name)这里如果不知道这个属性是什么,怎么才能取到这个字段的便宜量呢
作者回复: 不知道?不知道就没法取了。
2018-09-143