猿问

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

指针引用内存中的位置。据我所知,实际上所有内存地址都具有相同的类型,而与变量类型无关。


而不是使用不同的指针类型(*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

}


猛跑小猪
浏览 148回答 2
2回答

慕的地8271018

Go 中的类型系统旨在防止与指针相关的内存错误。这允许程序员有足够的控制权来操作内存中的对象,同时允许垃圾收集器顶部警察喜怒无常的繁重工作。如果您需要手动存储和转换指针类型,您可以使用unsafe 包。

冉冉说

这可能对所有指针类型仅使用一种类型吗?是的,这几乎就是 C 的工作方式。不幸的是,这使语言变得危险。假设您有一个 10 字节的数组。如果您只是传递指针,其他代码将不知道可以安全访问多少字节。这会导致各种缓冲区溢出错误。(即心脏出血)在 Go 中,它们的指针知道它所指向的事物的类型,因此它可以防止您的代码一直出现缓冲区溢出问题。你可以做你想做的事,但只能使用 Unsafe 包。顾名思义,这是一件非常危险的事情。也许如果你发布你真正想做的事情,人们可以帮助你。使用不安全指针并不是编写高性能代码的唯一方法。
随时随地看视频慕课网APP

相关分类

Go
我要回答