【发布时间】:2014-12-03 18:00:50
【问题描述】:
我正在将 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] );
此问题已得到纠正。
然后我意识到我对签名不是很清楚。
我可以稍微改变函数的签名,但我不能添加任何参数
我已经在使用“不安全”和“固定”关键字,所以不会伤害到我
它不需要是高效的代码,因为此移植旨在快速实现其他人为原型项目编写的算法。如果项目是“好的”,代码将被扔进垃圾箱并在 C++ dll 中重写。
函数“DoSomething”实际上是几个其他函数的嵌套,它被设计为一个快速的数学工作,但遗憾的是,我没有自己编写代码的所有知识。这就是为什么我认为作者已经很好地设计了它的功能,因为它已在全球范围内使用。
我会尝试 Servy 的建议,并在几天后回复您。
【问题讨论】:
-
这也是相当糟糕的 C++ 代码。我自己会使用枚举器。
-
我同意 IdeaHat 和 Yakk。可以在 C++ 中编写
p[3] = 0.4;DoSomething。你怎么知道数组边界? -
您可以像这样使用 LINQ:var filters = Vector.GetRange(index,count).... 将 Vector 数组更改为 List
-
@JohnPeters - 重要的是要指出这会创建一个新数组。系统希望更改数组中的元素,因此这在功能上不起作用。
-
在不改变被调用方法的签名的情况下,没有实际的方法可以实现这一点。你为什么反对这样做?将偏移量本身推送到需要它的方法有什么问题?
标签: c# arrays pointers porting