2017-05-03 109 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迷人的東西中放了很多想法:) –