本文实例分析了Go语言中的指针运算方法。分享给大家供大家参考。具体分析如下:
Go语言的语法上是不支持指针运算的,所有指针都在可控的一个范围内使用,没有C语言的*void然后随意转换指针类型这样的东西。最近在思考Go如何操作共享内存,共享内存就需要把指针转成不同类型或者对指针进行运算再获取数据。
这里对Go语言内置的unsafe模块做了一个实验,发现通过unsafe模块,Go语言一样可以做指针运算,只是比C的方式繁琐一些,但是理解上是一样的。
下面是实验代码:
复制代码 代码如下:package main
import "fmt"
import "unsafe"
type Data struct {
Col1 byte
Col2 int
Col3 string
Col4 int
}
func main() {
var v Data
fmt.Println(unsafe.Sizeof(v))
fmt.Println("----")
fmt.Println(unsafe.Alignof(v.Col1))
fmt.Println(unsafe.Alignof(v.Col2))
fmt.Println(unsafe.Alignof(v.Col3))
fmt.Println(unsafe.Alignof(v.Col4))
fmt.Println("----")
fmt.Println(unsafe.Offsetof(v.Col1))
fmt.Println(unsafe.Offsetof(v.Col2))
fmt.Println(unsafe.Offsetof(v.Col3))
fmt.Println(unsafe.Offsetof(v.Col4))
fmt.Println("----")
v.Col1 = 98
v.Col2 = 77
v.Col3 = "1234567890abcdef"
v.Col4 = 23
fmt.Println(unsafe.Sizeof(v))
fmt.Println("----")
x := unsafe.Pointer(&v)
fmt.Println(*(*byte)(x))
fmt.Println(*(*int)(unsafe.Pointer(uintptr(x) + unsafe.Offsetof(v.Col2))))
fmt.Println(*(*string)(unsafe.Pointer(uintptr(x) + unsafe.Offsetof(v.Col3))))
fmt.Println(*(*int)(unsafe.Pointer(uintptr(x) + unsafe.Offsetof(v.Col4))))
}
以上代码在我机器上的执行结果如下(结果会因机器和系统的不同而不太一样):
32
----
1
4
8
4
----
0
4
8
24
----
32
----
98
77
1234567890abcdef
23
unsafe模块的文档中提到几条转换规则,理解了以后就很容易做指针运算了:
A pointer value of any type can be converted to a Pointer.
A Pointer can be converted to a pointer value of any type.
A uintptr can be converted to a Pointer.
A Pointer can be converted to a uintptr.
希望本文所述对大家的Go语言程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 怒火战猴 Monkey Man
- 原神4.6枫丹新增钓鱼点分享 具体位置一览
- 原神虹彩蔷薇采集路线一览 81朵虹彩蔷薇
- 猫咪和汤X宫里的世界联动 公测定档4月25日
- 物华弥新迷踪盘第五关怎么过 迷踪盘第五关通关方法
- 物华弥新迷踪盘第六关怎么过 迷踪盘第六关通关方法
- 物华弥新迷踪盘第七关怎么过 迷踪盘第七关通关方法
- 老苹果电脑安装新系统,旧苹果电脑安装系统
- w7可以重装w10吗,windows7可以重装windows10吗
- win10虚拟机装win7注意事项,win10系统虚拟机安装教程win7
- 鸟山明打造《沙漠大冒险》现已发售!Steam特别好评
- 《庄园领主》销量破百万 在线人数创下同类型纪录!
- Bloober Team将很快公布《寂静岭2RE》发售日和平台!
- 詹雅雯.2016-何年何月再相逢【福茂】【WAV+CUE】
- 阿悄.2013-陪我去流浪【极韵文化】【WAV+CUE】