Apabila memanggil fungsi C yang mengharapkan penuding kepada penuding ke tatasusunan rentetan, bagaimana ini boleh dicapai dalam Go sambil membenarkan fungsi C mengubah suai rentetan tatasusunan?
Membuat kepingan dalam Go dan menghantarnya terus ke fungsi C tidak mungkin disebabkan oleh perbezaan dalam struktur data dan peruntukan memori. Sebaliknya, adalah perlu untuk memperuntukkan tatasusunan dalam C.
// Allocate an array in C cArray := C.malloc(C.size_t(c_count) * C.size_t(unsafe.Sizeof(uintptr(0)))) // Convert C array to Go array a := (*[1<<30 - 1]*C.char)(cArray) // Copy Go strings to C array for index, value := range strs { a[index] = C.CString(value) } // Call C function with pointer to array pointer err := C.f(&c_count, (***C.char)(unsafe.Pointer(&cArray)))
Dengan memperuntukkan tatasusunan dalam C, ia membenarkan fungsi C mengubah suai dan mengubah saiz tatasusunan. Perubahan yang dibuat dalam C akan ditunjukkan dalam kepingan Go selepas fungsi C kembali.
Atas ialah kandungan terperinci Bagaimana untuk Menghantar Go Slice ke Fungsi C yang Mengubah Penunjuk kepada Penunjuk kepada Susunan Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!