一尘不染

Go中的指针算法

go

考虑到您可以(无法想到一种放置它的好方法,但是)在Go中操作指针,是否有可能像在C中那样执行指针算术,例如遍历数组?我知道循环对于这些事情来说现在很好,但是我很好奇是否可能。


阅读 218

收藏
2020-07-02

共1个答案

一尘不染

否。来自“常见问题解答”

为什么没有指针算术?

安全。如果没有指针算术,就有可能创建一种永远不会派生出不正确地址的语言。编译器和硬件技术已经发展到可以使用数组索引的循环与使用指针算术的循环一样高效的地步。同样,缺少指针算法可以简化垃圾回收器的实现。

话虽这么说,您可以使用unsafe软件包解决此问题,但 不要

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

2020-07-02