【发布时间】:2019-02-20 18:46:43
【问题描述】:
看下面的代码,我会解释
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 的指针访问数组元素? 附加信息:这是我正在处理的一个大型项目的简化版本。我必须返回这个指针,我不能返回一个向量。
如果您需要我为您澄清任何事情,请告诉我。
【问题讨论】:
-
将它们作为切片传递?
-
我必须从函数返回指针。我不认为 slices 是正确的做法,但很高兴被示例代码证明是错误的。我认为问题可能是指针从 c++ 到 Go 时如何丢失地址。感谢回复
-
@DanielRamsey:同样,Go 只能调用 C 代码,句号。 C++ 代码需要使用 SWIG 生成的 C 包装器。除此之外,
pSrc指针在 C 和 C++ 之间有何不同?它们都是int*,并且内存布局是相同的。首先尝试使用文档中的示例,然后发布您遇到的任何问题。 -
@DanielRamsey:对不起,我没有关注。如果
pSrc是您要访问的数组指针,那么pSrc就是您要使用所示技术转换为切片的对象。
标签: c++ arrays pointers go swig