在Golang中,可以使用unsafe.Pointer
類型來訪問C中的數組數據。
假設有以下C代碼:
#include <stdio.h>
void 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
/*
#include <stdio.h>
void 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
包需要非常小心,因為它可能導致未定義的行為。確保在使用指針時遵循安全的操作。