Pointer arithmetic in Go

后端 未结 1 1916
庸人自扰
庸人自扰 2020-12-14 06:51

Considering you can (can\'t think of a great way to put it, but) manipulate pointers in Go, is it possible to perform pointer arithmetic like you would in C, say for iterati

1条回答
  •  粉色の甜心
    2020-12-14 07:44

    No. From the Go FAQ:

    Why is there no pointer arithmetic?

    Safety. Without pointer arithmetic it's possible to create a language that can never derive an illegal address that succeeds incorrectly. Compiler and hardware technology have advanced to the point where a loop using array indices can be as efficient as a loop using pointer arithmetic. Also, the lack of pointer arithmetic can simplify the implementation of the garbage collector.

    That being said, you can get around this by using the unsafe package, but just don't:

    package main
    
    import "fmt"
    import "unsafe"
    
    func main() {
        vals := []int{10, 20, 30, 40}
        start := unsafe.Pointer(&vals[0])
        size := unsafe.Sizeof(int(0))
        for i := 0; i < len(vals); i++ {
            item := *(*int)(unsafe.Pointer(uintptr(start) + size*uintptr(i)))
            fmt.Println(item)
        }
    }
    

    https://play.golang.org/p/QCHEQqy6Lg

    0 讨论(0)
提交回复
热议问题