[問題] pointer to array

作者: naikojack (築夢 逐夢 go~)   2015-08-10 09:43:13
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux/OSX
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
GNURAdio
問題(Question):
我目前卡在這個網頁範例 http://tinyurl.com/ofpb85p 從53 ~ 62行
根據這個範例 我寫了如下
vblock_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
const float *in = (const float *) input_items[0];
float *out = (float *) output_items[0];
int ninputs = input_items.size();
//for (int i = 0; i < p_vlen; i++)
for (int i = 0; i < noutput_items*p_vlen; i++)
{
int acc = ((float *) input_items[0])[i];
for (int j=1; j < ninputs; j++)
acc += ((float *) input_items[j])[i];
out[i]= (float) acc + out[i];
//我想用陣列方式來寫 但上方這行可能有錯
}
上面程式可能有許多錯誤 我主要問題是input_items和output_items看起來是
array 但是要提取裡面element值 不斷要透過 (float *)指標去做型態轉換
這原因是為何? 這之間的相關性 搞得不是很懂 為何不能直接input_items[0][i]
這類直接做? 以及為何會有((float *) input_items[j])[i] 這種先一個維度型態轉變
然後再提取? 為何不能先整體型態轉換 (float*) input_items[j][i] 再一起提取?
另外這個vector性質array 所讀出的size 無法知道array總共有多少size
或者說 我該如何知道output_items 是幾維陣列? input_items.size()只會返回
其中一維的長度 但另外一維度我感覺是完全未知
希望版上大大能大概給個方向指引 謝謝囉
作者: Feis (永遠睡不著 @@)   2015-08-10 10:08:00
你要去看 gr_vector_const_void_star 的定義.基本上就是個 C 的作法在沒用 template 的情況下就是用 void * 去指向任意型別
作者: naikojack (築夢 逐夢 go~)   2015-08-10 10:44:00
懂了 謝謝樓上:)

Links booklink

Contact Us: admin [ a t ] ucptt.com