为了账号安全,请及时绑定邮箱和手机立即绑定

不同类型的指针有什么区别?

不同类型的指针有什么区别?

Go
猛跑小猪 2022-04-20 17:53:32
指针引用内存中的位置。据我所知,实际上所有内存地址都具有相同的类型,而与变量类型无关。而不是使用不同的指针类型(*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 包

查看完整回答
反对 回复 2022-04-20
?
冉冉说

TA贡献1877条经验 获得超1个赞

这可能对所有指针类型仅使用一种类型吗?

是的,这几乎就是 C 的工作方式。不幸的是,这使语言变得危险。假设您有一个 10 字节的数组。如果您只是传递指针,其他代码将不知道可以安全访问多少字节。这会导致各种缓冲区溢出错误。(即心脏出血)

在 Go 中,它们的指针知道它所指向的事物的类型,因此它可以防止您的代码一直出现缓冲区溢出问题。

你可以做你想做的事,但只能使用 Unsafe 包。顾名思义,这是一件非常危险的事情。

也许如果你发布你真正想做的事情,人们可以帮助你。使用不安全指针并不是编写高性能代码的唯一方法。


查看完整回答
反对 回复 2022-04-20
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信