[英]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.