我正在將C++代碼轉換爲C#代碼,它恰好是頻域中圖像的快速傅里葉變換。只是爲了給出一些背景。C++和C#數組和空轉換
這裏是一個C++代碼的鏈接:fft.cc
我有這個功能稱爲步驟,它的簽名是在C++:
void step (int n, int mj, float a[], float b[], float c[], float d[], float w[], float sgn);
,被稱爲像這樣:
step (n, mj, &x[0*2+0], &x[(n/2)*2+0], &y[0*2+0], &y[mj*2+0], w, sgn);
我想將它轉換爲C#,現在這個函數在Y或X數組上運行,這取決於它是正向快速傅立葉變換還是後向快速傅立葉變換米(更多上下文)
我不明白的是,在C#中,做x[0*2+0]
什麼都不做......首先在方括號中放置一個整數實際上在該數組的一個位置調用一個變量。
但究竟是什麼在C++做的,我知道&
是當量的ref
C#的關鍵字,這是說得到被指向太陣列的內容,但我覺得在這種情況下這意味着更多不僅僅如此。
那麼你會怎麼調用C#該功能,顯然這會失敗:
step(n, mj, x[0 * 2 + 0], x[(n/2) * 2 + 0], y[0 * 2 + 0], y[mj * 2 + 0], w, sgn);
請問您是否可以在代碼中詳細說明,我發現它有點難以理解,是C++將數組傳遞給函數還是單個浮點數? –
它將數組條目的地址傳遞給函數。 '&x [0 * 2 + 0]'表示:取[0 * 2 + 0]處的浮點地址(在這種情況下:數組的起始處)並將其傳遞給函數。在C++中,這又是一個數組,所以在函數內部,a將是一個數組,其索引現在是0,而參數是。我會盡量解釋一下這一點。 – PMF
Ahhh,所以它實際上試圖從索引處開始指定數組的子集。歡呼聲 –