c# - C++/CLI 中指向托管数组的指针

标签 c# arrays pointers c++-cli managed

好吧,我知道你通常会如何声明一个指针:

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/

相关文章:

c - 使用 fwrite 将结构体指针写入文件

c# - 获取不一致的可访问性错误

c# - 从本地文本文件读取到 C#?

c# - 开发游戏 - 如何执行需要多个游戏循环的事情?

javascript - 对复杂数组进行分组

java - 如何在java中检查矩阵位置值?

c - 为什么编译器不在使用指针等数组的表达式上显示错误?

c++ - 为什么这个访问冲突

c# - C++ dll Pinvoke函数,参数中有函数指针结构

javascript - 将 PHP 数组传递给 JavaScript 对象数组