Gewusst wie: Zugreifen auf ein Arrayelement mit einem Zeiger (C#-Programmierhandbuch)How to: Access an Array Element with a Pointer (C# Programming Guide)

In einem unsicheren Kontext können Sie mittels Zeigerelementzugriff auf ein Element im Speicher zugreifen, wie im folgenden Beispiel gezeigt:In an unsafe context, you can access an element in memory by using pointer element access, as shown in the following example:

 char* charPointer = stackalloc char[123];  
for (int i = 65; i < 123; i++)  
{  
    charPointer[i] = (char)i; //access array elements  
}  

Der Ausdruck in eckigen Klammern muss implizit in int, uint, long oder ulong konvertierbar sein.The expression in square brackets must be implicitly convertible to int, uint, long, or ulong. Der Vorgang p[e] entspricht *(p+e).The operation p[e] is equivalent to *(p+e). Wie in C und C++ überprüft der Zeigerelementzugriff keine Fehler außerhalb des gültigen Bereichs.Like C and C++, the pointer element access does not check for out-of-bounds errors.

BeispielExample

In diesem Beispiel werden einem Zeichenarray, charPointer, 123 Speicheradressen zugeordnet.In this example, 123 memory locations are allocated to a character array, charPointer. Das Array wird verwendet, um die Klein- und Großbuchstaben in zwei for-Schleifen anzuzeigen.The array is used to display the lowercase letters and the uppercase letters in two for loops.

Beachten Sie, dass der Ausdruck charPointer[i] und der Ausdruck *(charPointer + i) äquivalent sind. Sie erhalten dasselbe Ergebnis, unabhängig davon, welchen Ausdruck Sie verwenden.Notice that the expression charPointer[i] is equivalent to the expression *(charPointer + i), and you can obtain the same result by using either of the two expressions.

// compile with: /unsafe
class Pointers
{
    unsafe static void Main() 
    {
        char* charPointer = stackalloc char[123];

        for (int i = 65; i < 123; i++)
        {
            charPointer[i] = (char)i;
        }

        // Print uppercase letters:
        System.Console.WriteLine("Uppercase letters:");
        for (int i = 65; i < 91; i++)
        {
            System.Console.Write(charPointer[i]);
        }
        System.Console.WriteLine();

        // Print lowercase letters:
        System.Console.WriteLine("Lowercase letters:");
        for (int i = 97; i < 123; i++)
        {
            System.Console.Write(charPointer[i]);
        }
    }
}

Großbuchstaben:Uppercase letters:
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
Kleinbuchstaben:Lowercase letters:
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
ZeigerausdrückePointer Expressions
ZeigertypenPointer types
TypenTypes
unsafeunsafe
fixed-Anweisungfixed Statement
stackallocstackalloc