3 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
編輯這將打印正確的內(nèi)容
package main
/*
#include <stdio.h>
void getMatrix(const float **matrix){
float *m = (float *)matrix;
int i;
for(i = 0; i<9; i++) {
printf("%f\n",m[i]);
}
}
*/
import "C"
import "unsafe"
func main() {
a := []float32{1,2,3,4,5,6,7,8,9}
C.getMatrix((**C.float)(unsafe.Pointer(&a[0])))
}

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是一種將指向go數(shù)組的指針傳遞給C函數(shù)的方法,因此C函數(shù)可以填充它:
package main
/*
#include <stdio.h>
void getMatrix(float *m) {
int i;
for(i = 0; i < 16; i++) {
m[i] = (float)i;
}
}
*/
import "C"
import "fmt"
func main() {
var a [16]float32
C.getMatrix((*C.float)(&a[0]))
fmt.Println(a)
}

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
擴(kuò)展Inuart提供的答案:
package main
/*
#include <stdio.h>
void getMatrix(const float **matrix){
float *m = (float *)*matrix;
int i;
for(i = 0; i<16; i++) {
printf("%f\n",m[i]);
}
}
*/
import "C"
import "unsafe"
func main() {
// Create the contiguous 16 element array, but organise it how it is described.
a := [4][4]float32{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16},
}
m := &a // Take the pointer.
C.getMatrix((**C.float)(unsafe.Pointer(&m))) // Take the handle and pass it.
}
這為您提供了您似乎需要的處理行為,并具有Go語言中數(shù)據(jù)的形狀符合C API所要求的優(yōu)點(diǎn)-無需回避使用的便利性和安全性繼續(xù)吧,僅因?yàn)槟谂cC交互。
- 3 回答
- 0 關(guān)注
- 277 瀏覽
添加回答
舉報(bào)