2017-05-03 13 views
0

++私はint* intをポインタにキャストしますか? C/Cで

このような
int i = 0x1040c108; 
int *p = (int*)i; // compiles 

intをキャストすることができますが、なぜ私は行くにはこれを行うことはできませんか?

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

ゴーランでこれを達成する方法は何ですか?

答えて

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の魅力的なものにたくさんの考えを入れています:) –

関連する問題