我將一個C++應用程序移植到C#,並遇到指針的一些問題。C#將數組的指針傳遞給從特定偏移量開始的函數
我想要實現的是傳遞一個具有偏移量的數組指針,以便傳遞的函數可以在數組的正確部分上工作。我不想更改函數的簽名來爲偏移量添加額外的值。
所以,這是C++代碼的例子一塊,我想在C#中傳遞:
void DoSomething(double p[])
{
p[0] = 0.4;
p[1] = 0.4;
}
int main()
{
double Vector[3];
Vector[0] = 0.2;
Vector[1] = 0.2;
Vector[2] = 0.2;
DoSomething(&Vector[1]);
}
我怎麼能這樣做呢?請記住,我無法通過偏移量?
[編輯] 謝謝大家的答案。 首先,我必須道歉:我在複製代碼時犯了一個大錯誤。
我的最後一行,而不是
DoSomething(&Vector[1]);
這已得到糾正寫道
DoSomething(Vector[1]);
。
然後我意識到我對簽名不太清楚。
我可以稍微改變功能的簽名,但
我已經使用了「不安全」和「固定」的關鍵字我不能添加任何參數,因此它不會傷害我
它不需要是有效的代碼,因爲這個移植的目的是成爲一個快速&其他人爲一個原型項目編寫的算法的髒實現。如果項目是「OK」,則代碼將拋出垃圾並在C++ dll中重寫。
函數「DoSomething」實際上是一些其他函數的嵌套,它被設計成一個快速的數學工作,但遺憾的是,我沒有所有的知識來編寫它自己。這就是爲什麼我認爲作者已經很好地設計了它的功能,因爲它在世界範圍內使用。
我會嘗試使用Servy的建議,幾天後我會回來給你回覆。
這是非常ç差++代碼。我會自己使用一個枚舉器。 – IdeaHat 2014-12-03 18:08:10
我同意IdeaHat和Yakk。在C++'DoSomething'中寫'p [3] = 0.4;'是可能的。你怎麼知道數組的邊界? – Sjips 2014-12-03 18:10:53
你可以像這樣使用LINQ:var filtered = Vector.GetRange(index,count)....將矢量數組更改爲列表 –
2014-12-03 18:13:44