unsafe.Pointer 面试题,几乎没几个人答得对,有人知道答案的原因吗?

af913337456 · 2018-03-18 22:07:19 · 2851 次点击

个人感觉面go的话,不太可能会问这些,面c问这些还是挺有可能的

#4
更多评论
func fun1()  {
    a := 2
    c := (*string) (unsafe.Pointer(&a)) //c为a的unsafe.pointer强制转为string指针,*c指的是a的值,a的值是int型的,这里*c = "44"是强制赋了个字符串,所以赋值是失败的,只是没有提示,因为使用了unsafe
    *c = "44"
    fmt.Println(*c) //这时的c是string指针,*c指的应该是一个字符串,但是里面实际上是int数据,所以操作也是失败的
}
func fun2()  {
    a := "654"
    c := (*string) (unsafe.Pointer(&a)) //根据fun1的解释 a 为字符串型,那整个流程就通了,自然*c打出来的是 44,在*c="44"上面打印出来的是肯定是654
    *c = "44"
    fmt.Println(*c)
}
func fun3()  {
    a := 3
    c := *(*string) (unsafe.Pointer(&a))  //这里获取的是a地址里的string值,但a的值是int型,所以操作失败,没有得到值,但c被定义里了string型变量,c = "445",给string型变量赋string值 自然是正常的
    c = "445"
    fmt.Println(c)
}
#1

实际工作中会用到这些吗?

#2