2016-04-13 14 views
1

Als das nicht verwaltete C++ ist es möglich, zu einem anderen Objekt zu finden. Wie der Zeiger auf ein ArrayUnterschiede von Zeigern zwischen nicht verwaltetem C++ und verwaltetem C++

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

Sie können direkt * Zeiger verwenden, um den ersten Wert des Elements in der Anordnung zu erhalten. So können wir auch * (Zeiger ++) verwenden, um auf das zweite Element zu zeigen.

Wenn es jedoch möglich ist,^(Zeiger + 5) direkt zu verwenden, um das sechste Element des Arrays zu erhalten? Das Beispiel ist wie folgt.

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

Wie kann ich den Zeiger als Medium verwenden, um auf verschiedene Elemente im Array zuzugreifen?

Antwort

0

hier ist ein etwas anderer Ansatz, die von Nutzen sein kann ...

Es Innen Pointer-Arithmetik verwendet (ein Array zu durchlaufen).

Hoffe, das hilft.

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 
    } 
} 

Referenz: C++/CLi Visual C++ Sprache für NET (S. 99)

hier ist ein anderes Beispiel von: 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); 
} 
Verwandte Themen