簡體   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