非托管C ++和托管C ++之间指针的差异

时间:2016-04-13 08:19:04

标签: windows pointers c++-cli managed-c++

由于非托管C ++可以随意定位到不同的对象。 比如指向数组的指针

int pt[50];
int* pointer = pt;

我们可以直接使用*指针来获取数组中元素的第一个值。 因此,我们也可以使用*(指针++)来指向第二个元素。

但是,如果可以直接使用^(指针+ 5)来获取数组的第六个元素? 示例如下。

array<int>^ pt = gcnew array<int>(50);
int^ pointer = pt;

如何使用指针作为媒介来访问数组中的不同元素?

1 个答案:

答案 0 :(得分:0)

这是一种可能有用的略有不同的方法......

它使用内部指针算法(遍历数组)。

希望这有帮助。

using namespace System;

ref class Buf
{
    // ...
};

int main()
{
   array<Buf^>^ array_of_buf = gcnew array<Buf^>(10);

   // Create a Buf object for each array position
   for each (Buf^ bref in array_of_buf)
   {
      bref = gcnew Buf();
   }

   // create an interior pointer to elements of the array
   interior_ptr<Buf^> ptr_buf;

   // loop over the array with the interior pointer
   // using pointer arithmetic on the interior pointer
   for (ptr_buf = &array_of_buf[0]; ptr_buf <= &array_of_buf[9]; ptr_buf++)
   {
      // dereference the interior pointer with *
      Buf^ buf = *ptr_buf;
      // use the Buf class
   }
}

参考:C ++ / CLi .net的可视化c ++语言(第99页)

这是另一个例子:https://msdn.microsoft.com/en-us/library/y0fh545k.aspx

// interior_ptr.cpp
// compile with: /clr
using namespace System;

ref class MyClass {
public:
   int data;
};

int main() {
   MyClass ^ h_MyClass = gcnew MyClass;
   h_MyClass->data = 1;
   Console::WriteLine(h_MyClass->data);

   interior_ptr<int> p = &(h_MyClass->data);
   *p = 2;
   Console::WriteLine(h_MyClass->data);

   // alternatively
   interior_ptr<MyClass ^> p2 = &h_MyClass;
   (*p2)->data = 3;
   Console::WriteLine((*p2)->data);
}