【发布时间】:2020-11-17 08:29:15
【问题描述】:
在 go 中,我正在尝试遍历在 C 中创建的数组。我有数组的长度 (int arrc) 及其指针 (mytype *arrv)。
我找到了一种方法,但是它涉及在 go 和 c 之间来回传输,并且超级超级hacky。
// void *nextelement(void *p, int i, int size) {
// return (void*)((uint64_t)p+i*size);
// }
#import "C"
...
for i := 0; i < protoc; i++ {
adr := (*C.mytype)(C.nextelement(unsafe.Pointer(myarr), C.int(i), C.sizeof_mytype))
所有这些代码只是为了得到myarr[i]...感觉不对。
【问题讨论】:
-
更新:使用此逻辑运行并进行一些测试后,代码会出现不可预知的恐慌(换句话说,未定义的行为)。所以我发布的解决方案甚至不起作用。
-
通常的技巧是获取指向数组第一个元素的指针并将其转换为切片:stackoverflow.com/q/48756732/1256452
-
@torek / JimB,这正是我想要的。你们中的一个人应该回答被接受。