深度解密Go语言之unsafe

深度解密Go语言之unsafe

限制一:Go的指针不能进行数学运算

来看一个简单的例子:

a := 5p := &a
p++p = &a + 3

上面的代码将不能通过编译,会报编译错误:invalid operation,也就是说不能对指针做数学运算。

限制二:不同类型的指针不能相互转换

例如下面这个简短的例子:

func main() {    a := int(100)    var f *float64
    f = &a}

也会报编译错误:

cannot use &a (type *int) as type *float64 in assignment

关于两个指针能否相互转换,参考资料中 go 101 相关文章里写得非常细,这里我不想展开。个人认为记住这些没有什么意义,有完美主义的同学可以去阅读原文。当然我也有完美主义,但我有时会克制,嘿嘿。

限制三:不同类型的指针不能使用==或!=比较

只有在两个指针类型相同或者可以相互转换的情况下,才可以对两者进行比较。另外,指针可以通过 ==!= 直接和 nil 作比较。

限制四:不同类型的指针变量不能相互赋值

这一点同限制三。

参考

https://mp.weixin.qq.com/s/OO-kwB4Fp_FnCaNXwGJoEw

转载于:https://www.cnblogs.com/zhouj-happy/p/10972863.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值