golang 指针类型学习
2024-10-09 18:04:41
对于指针类型不安全编程,通过指针值以及偏移量操作slice私有属性
// 通过指针值获取切片
func TestGetPrivate(t *testing.T) {
s := []int{1, 2, 3}
sptr := uintptr(unsafe.Pointer(&s)) // 获取当前结构体实例的指针值
t.Log(sptr)
arrPtr := (*[]int)(unsafe.Pointer(sptr))// 对于slice结构体而言,第一个属性就是数组指针类型
arr := *arrPtr
t.Logf("%v,%T", arr, arr)
lenPtrAddr := sptr + unsafe.Sizeof(unsafe.Pointer(sptr))// 根据第一个属性的指针值以及第一个属性类型的长度,获取第二个属性的地址值
lenPtr := (*int)(unsafe.Pointer(lenPtrAddr)) // 获取len属性的地址值
assert.Equal(t, len(s), *lenPtr)
}
最新文章
- 小菜学习设计模式(一)—模板方法(Template)模式
- linux 基础知识
- Protocol buffers 介绍
- Java语法基础思维图
- Spring的定时任务配置2(转)
- 删除(注意,删除后,后面顶上去,所以id会一直变,所以我们用class来定义,因为id是唯一的)
- 147. Insertion Sort List
- sql新手全套
- Android集成Mina NIO Socket
- Node.js : 我只需要一个店小二
- CodeForces 701C	They Are Everywhere(map的应用)
- js中盒子模型常用的属性你还记得几个?
- TCP建立连接和断开连接图解
- Eclipse远程调试hadoop源码
- Python标准库之textwrap模块
- Distance on the tree
- C#设计模式之十三模板方法模式(Template Method Pattern)【行为型】
- Gluon Datasets and DataLoader
- Guava 2:Basic utilities基本工具
- JS 自己实现Map
热门文章
- Java之reflection(反射机制)——通过反射操作泛型,注解
- Tensorflow2(一)深度学习基础和tf.keras
- jQuery入口函数与JavaScript入口函数的区别
- Auto Generate Reflection Information for C++
- 在Windows和MacOS下编译Lua
- Spine应用--使用Spine动画制作动作游戏
- jkd1.8 stream
- My Github Repository
- EasyPoi导出Excel
- [LeetCode题解]79. 单词搜索