由于非托管C ++可以随意定位到不同的对象。 比如指向数组的指针
int pt[50];
int* pointer = pt;
我们可以直接使用*指针来获取数组中元素的第一个值。 因此,我们也可以使用*(指针++)来指向第二个元素。
但是,如果可以直接使用^(指针+ 5)来获取数组的第六个元素? 示例如下。
array<int>^ pt = gcnew array<int>(50);
int^ pointer = pt;
如何使用指针作为媒介来访问数组中的不同元素?
答案 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);
}