2017-05-03 110 views
0

在C/C++我可以投intint*这样将int投射到指针?

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

,但我为什么能做到这一点围棋不是?

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

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

回答

2

浏览不安全的软件包。请注意,出于某种原因,它被称为“不安全”,除非您真的需要执行绕过类型安全操作或直接在内存中操作的操作,否则不应使用它。

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) 
} 
+0

考虑一下这个包是做我有点惊讶,这个代码是允许类似的golang操场 –

+0

@JasonSperske呀,不开玩笑。他们必须相当信任他们的沙盒。 – RayfenWindspear

+2

显然他们已经在这个https://blog.golang.org/playground迷人的东西中放了很多想法:) –