go - 将 int 转换为指针?

标签 go

在 C/C++ 中,我可以将 int 转换为 int*,如下所示

int i = 0x1040c108;
int *p = (int*)i; // compiles

但为什么我不能在 Go 中执行此操作?

addr := 0x1040c108
p := (*int)(addr) // Error: cannot convert addr (type int) to type *int

在golang中实现这个的方法是什么?

最佳答案

检查不安全的包。请注意,它被称为“不安全”是有原因的,除非您确实需要执行绕过类型安全的操作,或直接在内存上操作,否则可能不应该使用它。

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

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    fmt.Println("Hello, playground")
    var intaddr int = 0x1040c108
    var addr uintptr = uintptr(intaddr)
    ptr := unsafe.Pointer(addr)
    p := (*int)(ptr)
    fmt.Printf("Type: %T, Ptr: %v, Val: %d", p, p, *p)
}

关于go - 将 int 转换为指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43767898/

相关文章:

parallel-processing - goroutines 在多核处理器上的表现如何

json - Go json.Unmarshal 字段案例

Go- 合并两个结构的值,采用非空字段

go - 为什么这个基本的 go-routine 程序会返回 true?

json - 去图表动态数据

django - 从 Django View 将变量传递给远程(Golang)应用程序的最佳方法

go - 新行分隔的输入流已写入文件

html - 在 go 中提供 .html 模板时,它不会加载任何媒体

google-app-engine - 如何在结构中存储结构?

go - 如何通过命令行删除/bin目录下的二进制文件?