指针引用内存中的位置。据我所知,实际上所有内存地址都具有相同的类型,而与变量类型无关。而不是使用不同的指针类型(*int等*string),这是否可能只对所有指针类型使用一种类型(var p pointer)?不同的指针类型有什么区别?package mainimport "fmt"func main() { i := 5 s := "abc" var pi *int // alternatively var pi pointer var ps *string // alternatively var ps pointer pi = &i ps = &s fmt.Printf("%p %p", pi, ps) // result is 0x1040e0f8 0x1040a120}
2 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
Go 中的类型系统旨在防止与指针相关的内存错误。这允许程序员有足够的控制权来操作内存中的对象,同时允许垃圾收集器顶部警察喜怒无常的繁重工作。
如果您需要手动存储和转换指针类型,您可以使用unsafe 包。
冉冉说
TA贡献1877条经验 获得超1个赞
这可能对所有指针类型仅使用一种类型吗?
是的,这几乎就是 C 的工作方式。不幸的是,这使语言变得危险。假设您有一个 10 字节的数组。如果您只是传递指针,其他代码将不知道可以安全访问多少字节。这会导致各种缓冲区溢出错误。(即心脏出血)
在 Go 中,它们的指针知道它所指向的事物的类型,因此它可以防止您的代码一直出现缓冲区溢出问题。
你可以做你想做的事,但只能使用 Unsafe 包。顾名思义,这是一件非常危险的事情。
也许如果你发布你真正想做的事情,人们可以帮助你。使用不安全指针并不是编写高性能代码的唯一方法。
- 2 回答
- 0 关注
- 147 浏览
添加回答
举报
0/150
提交
取消