
Go - cgo访问C数组 & 内存
发布日期:2021-05-14 03:41:59
浏览次数:20
分类:精选文章
本文共 1696 字,大约阅读时间需要 5 分钟。
示例
package main/*#include#include struct Dog { char name[32]; int id;};#define MAX_DOG 16struct Dog dogs[MAX_DOG];*/import "C"import "fmt"import "unsafe"func main () { var dog C.struct_Dog fmt.Println("C Array >>>>>>>>>>>>>>>>>>>") // C 定义数组可直接通过 range 访问 for k, v := range C.dogs { //fmt.Println("k=", k) dog = v dog.id = C.int(k) fmt.Println("Id", int(dog.id)) } fmt.Println("C Malloc >>>>>>>>>>>>>>>>>>>") ptr := C.malloc(C.sizeof_struct_Dog * C.size_t(10)) var e *C.struct_Dog var Ptr uintptr fmt.Println("malloc", ptr) e = (*C.struct_Dog)(ptr) for i := 0; i < 10; i++ { e.id = C.int(i) // 通过unsafe.Pointer 访问内存地址 Ptr = (uintptr)(unsafe.Pointer(ptr)) + (uintptr)(C.sizeof_struct_Dog * C.int(i)) e = (*C.struct_Dog)(unsafe.Pointer(Ptr)) } Ptr = uintptr(unsafe.Pointer(ptr)) for i := 1; i < 10; i++ { e = (*C.struct_Dog)(unsafe.Pointer(Ptr)) fmt.Println("ptr", unsafe.Pointer(Ptr)) fmt.Println("id", int(e.id)) Ptr = (uintptr)(unsafe.Pointer(ptr)) + (uintptr)(C.sizeof_struct_Dog * C.int(i)) } defer C.free(ptr)} 输出:
# go build c_struct_array.goC Arrary >>>>>>>>>>>>>>>>>>>>Id 0Id 1Id 2Id 3Id 4Id 5Id 6Id 7Id 8Id 9Id 10Id 11Id 12Id 13Id 14Id 15C Malloc >>>>>>>>>>>>>>>>>>>>malloc 0x196b7e0ptr 0x196b7e0id 1ptr 0x196b804id 2ptr 0x196b828id 3ptr 0x196b84cptr 0x196b870id 5ptr 0x196b894id 6ptr 0x196b8b8id 7ptr 0x196b8dcid 8ptr 0x196b900id 9
发表评论
最新留言
不错!
[***.144.177.141]2025年04月30日 14时22分02秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
解决github Git clone 慢的问题
2019-03-11
一张图搞定RPC框架核心原理
2019-03-11
Scala中的包
2019-03-11
参加阿里的Java面试经验
2019-03-11
Python微信公众号
2019-03-11
他来了他来了,他带着云栖大会的免费门票走来了
2019-03-11
Oracle笔记
2019-03-11
如何复用外部shell脚本
2019-03-11
JAVA集合类Collection浅析
2019-03-11
获取linux 主机cpu类型
2019-03-11
限流的算法有哪些?
2019-03-11
Failed to notify build listener.
2019-03-11
TextWiew单个线条
2019-03-11
Android Studio updating indices 一直刷新和闪烁
2019-03-11
个人购买服务器问题?
2019-03-11
pwntools编写技巧
2019-03-11
How2Heap笔记(三)
2019-03-11
go--microSocket服务端 php客户端
2019-03-11
如何修改Pspice元件库中元件的模型参数?
2019-03-11
小程序提交新数据后如何返回上一页并刷新数据?
2019-03-11