指针引用内存中的某个位置。实际上,据我所知,所有内存地址都具有独立于变量类型的相同类型。
对于所有指针类型,只使用一种类型(*int
),而不是使用不同的指针类型(*string
,var p pointer
等...)。
不同指针类型之间有什么区别?
package main
import "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
}
答案 0 :(得分:2)
Go中的类型系统旨在防止与指针相关的内存错误。这允许程序员有足够的控制来操纵内存中的对象,同时允许垃圾收集器顶部警察喜怒无常。 如果需要手动存储和转换指针类型,可以使用unsafe package。
答案 1 :(得分:1)
这对于所有指针类型只使用一种类型吗?
是的,这几乎就是C的工作原理。不幸的是,这使语言变得危险。假设你有一个10字节的数组。如果您只是传递指针,其他代码将不知道可以安全访问多少字节。这会导致各种缓冲区溢出错误。 (即HeartBleed)
在Go中,它们指针知道它指向的东西的类型,因此它可以防止代码一直出现缓冲区溢出问题。
您可以执行您想要的操作,但只能使用不安全的软件包。顾名思义,这是一件非常危险的事情。
也许如果你发布你实际上想要做的事情,人们可以帮助你。使用不安全的指针并不是编写高性能代码的唯一方法。