好吧,我知道你通常会如何声明一个指针:
void SomeFunction(array<float> ^managedArray)
{
pin_ptr<float> managedArrayPtr = &managedArray[0];
}
除非 managedArray 不包含任何元素,否则这工作正常。在这种情况下,它会抛出 IndexOutOfRangeException。
在 C# 中你可以这样做:
void SomeFunction(float[] managedArray)
{
fixed (float* managedArrayPtr = managedArray)
{
}
}
它不进行内存访问,即使 managedArray 为空也能正常工作。 我是否真的必须在我使用指向托管数组的指针的任何地方检查元素的数量,或者 C++/CLI 是否有办法像 C# 那样执行此操作? 它应该使用 ASM 中的“lea”指令,它不进行内存访问。
非常感谢任何帮助!
最佳答案
当数组为空时尝试从数组中读取没有多大意义。只需检查一下:
void SomeFunction(array<float> ^managedArray)
{
if (managedArray->Length > 0) {
pin_ptr<float> managedArrayPtr = managedArray;
//etc...
}
}
关于c# - C++/CLI 中指向托管数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3523754/