[英]How to pass a pointer to function which changes the pointer, using CFFI
我有以下 c function 我想向其中傳遞一個虛擬指針,以便我可以檢索生成的數組:
int generateFloatArr(float **outputArr){
float result[4] = {1.0,2.0,3.0,4.0};
*outputArr=&result;
return 4;
}
有了它,我可以在 c 中執行以下操作:
float *output;
int arrLen = generateFloatArr(&output);
printf("%f \n",output[0]); //prints "1.000000"
使用 CFFI,我無法與這個 function 交互。
我可以創建一個指針:
p_floatArr=ffi.new("float *")
但我不確定如何將p_floatArr
的地址傳遞給lib.generateFloatArr()
。
我嘗試了這個,而不是python-CFFI 文檔似乎建議這樣做:
p_p_floatArr=ffi.new("float **")
lib.generateFloatArr(p_p_floatArr)
print(p_p_floatArr[0][0])
但是浮點值不正確。 如果我在 c 中進行上述模擬:
float **output;
generateFloatArr(output);
printf("%f \n",output[0][0]);
這給出了段錯誤。
如何正確地將指針(指向指針)傳遞給這個 function?
在generateFloatArr()
中,或者:
*outputArr
需要用malloc()
分配,然后用值填充,或者
結果需要初始化為static const float result[4]={...}
從 python 方面,它可以做到:
p_p_floatArr=ffi.new("float **")
lib.generateFloatArr(p_p_floatArr)
print(p_p_floatArr[0][0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.