在Golang中,可以使用unsafe.Pointer
类型来访问C中的数组数据。
假设有以下C代码:
#includevoid print_array(int *arr, int length) { for (int i = 0; i < length; i++) { printf("%d ", arr[i]); } printf("\n"); }
我们想要在Golang中调用print_array
函数并传递一个数组的指针。
首先,需要在Golang代码中导入unsafe
包:
import "unsafe"
然后,可以定义一个C数组指针类型的变量:
var arr *C.int
接下来,可以使用C.CString
函数将Golang中的数组转换为C中的数组:
length := C.int(len(myArray)) arr = (*C.int)(unsafe.Pointer(&myArray[0]))
其中,&myArray[0]
表示数组的第一个元素的地址,然后通过unsafe.Pointer
将其转换为*C.int
类型的指针。
最后,可以调用C函数并传递指针参数:
C.print_array(arr, length)
完整的示例代码如下:
package main /* #includevoid print_array(int *arr, int length) { for (int i = 0; i < length; i++) { printf("%d ", arr[i]); } printf("\n"); } */ import "C" import "unsafe" func main() { myArray := []int{1, 2, 3, 4, 5} length := C.int(len(myArray)) arr := (*C.int)(unsafe.Pointer(&myArray[0])) C.print_array(arr, length) }
运行上述代码,将会输出:
1 2 3 4 5
这样就成功在Golang中使用指针从C中的数组访问数据了。请注意,使用unsafe
包需要非常小心,因为它可能导致未定义的行为。确保在使用指针时遵循安全的操作。