繁体   English   中英

如何使用 CFFI 将指针传递给 function 更改指针

[英]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()中,或者:

  1. *outputArr需要用malloc()分配,然后用值填充,或者

  2. 结果需要初始化为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM