golang中内存地址计算-根据内存地址获取下一个内存地址对应的值
package main
import (
"fmt"
"unsafe"
)
func main() {
// 根据内存地址获取下一个字节内存地址对应的值
dataList := [3]int8{11, 22, 33}
// 1. 获取数组第一个元素的地址
var firstDataPtr *int8 = &dataList[0]
// 2. 转换成Pointer类型
ptr := unsafe.Pointer(firstDataPtr)
// 3. 转换成uIntPtr类型,然后进行内存地址的计算(即:地址加一个字节,意味着取第二个索引位置的值)
targetAddress := uintptr(ptr) + 2
// 4. 根据新地址,重新转换成Pointer类型
newPtr := unsafe.Pointer(targetAddress)
// 5. Pointer对象转换为int8指针类型
value := (*int8)(newPtr)
// 6. 根据指针获取值
fmt.Println("最终结果为:", *value)
}

浙公网安备 33010602011771号