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)

}

  

posted @ 2021-10-10 13:58  专职  阅读(610)  评论(0编辑  收藏  举报