这个问题在这里已有答案:
请参阅下面的代码,我将解释
int* Camera::retrieveDataPointerPerBuffer() {
int cameraData [10] = {1,2,3,4,5,6,7,8,9,10};
int* pSrc = cameraData;
return cameraData;
} //camera.cpp
上面的代码有int指针pSrc指向数组然后返回。这是C ++中的一个函数。接下来,我使用SWIG来实际包装这个C ++函数,这样我就可以在Go中调用它。以下代码演示了在Go中调用的函数。
func myCamera() {
cam := camera.NewCamera()
pSrc := cam.RetrieveDataPointerPerBuffer()
for i := 0; i < 10; i++ {
fmt.Println("%d", pSrc)
}
} //main.go
注意:我知道我不能在Go中迭代指针。但有什么办法吗?
输出:0
问题:如何通过从C ++到Go的指针访问数组元素?附加信息:这是我正在处理的大型项目的简化版本。我必须返回这个指针,我不能返回一个向量。
如果您需要我为您澄清任何事情,请告诉我。
@JimB感谢您的所有资源。我想通了,这似乎可以解决问题。
int* Camera::retrieveDataPointerPerBuffer() {
int cameraData [10] = {1,2,3,4,5,6,7,8,9,10};
int* pSrc = cameraData;
return cameraData;
} //camera.cpp
下面包含了我所做的更改
func myCamera() { //For Goroutine
cam := camera.NewCamera()
pSrc := cam.RetrieveDataPointerPerBuffer()
arraySize := 10
slice := (*[1 << 30]C.int)(unsafe.Pointer(pSrc))[:arraySize:arraySize]
fmt.Println(slice)
}
输出:[1,2,3,4,5,6,7,8,9,10]
跟进问题:有人会介意解释这行代码吗?
slice := (*[1 << 30]C.int)(unsafe.Pointer(pSrc))[:arraySize:arraySize]