【问题标题】:Convert array<int^>^ to int*将数组<int^>^ 转换为 int*
【发布时间】:2010-08-25 10:31:51
【问题描述】:

如何将array&lt;int^&gt;^ 转换为int*

【问题讨论】:

  • C++ 或 C# 还是类似 C#++ 的东西?
  • 它是 C++/CLI,微软对 C++ 的 .NET 扩展。
  • 您确定需要array&lt;int^&gt;^吗?比如C#的string[]变成C++/CLIarray&lt;System::String^&gt;^,但是C#的int[]是C++/CLIarray&lt;int&gt;^没有第二个^

标签: arrays c++-cli unmanaged managed


【解决方案1】:

你不能,至少不是简单的方法。

如果您的意思是 array&lt;int&gt;^ 到 int*,您可以执行以下操作:

array<int>^ arr;
cli::pin_ptr<int> pArrayElement = &arr[0];

然后在pin_ptr 上使用经典指针算法。

【讨论】:

    【解决方案2】:

    我认为直接将array&lt;int^&gt;^ 转换为int* 会很困难,因为它是对整数的引用数组,而不是整数数组。整数本身的内存布局没有任何承诺,这是将它们放入普通的旧 C/C++ 数组所必需的。

    我认为最简单的方法是复制数组,将其传递给f(int* input),然后如果被 f 修改,则可能将数据复制回来。

    【讨论】:

      【解决方案3】:

      数组名是数组中第一个元素的地址。

      int array[] = {1, 2, 3, 4, 5};
      int* p = array;
      

      【讨论】:

      • 是的,我们知道。但这并不能回答问题。
      • 假设我有:array ^p;我想将 p 作为参数传递给 f(int* input);我该怎么办?
      猜你喜欢
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 2012-09-28
      • 1970-01-01
      相关资源
      最近更新 更多