Arithmetische Operationen für Zeiger (C#-Programmierhandbuch)Arithmetic Operations on Pointers (C# Programming Guide)

In diesem Thema wird die Verwendung der arithmetischen Operatoren + und - zur Bearbeitung von Zeigern erläutert.This topic discusses using the arithmetic operators + and - to manipulate pointers.

Hinweis

Das Durchführen arithmetischer Operationen auf void-Zeigern ist nicht möglich.You cannot perform any arithmetic operations on void pointers.

Addieren und Subtrahieren von numerischen Werten zu bzw. von ZeigernAdding and Subtracting Numeric Values to or From Pointers

Sie können einen Wert n des Typs int, uint, long oder ulong zu einem Zeiger p eines beliebigen Typs außer void* hinzufügen.You can add a value n of type int, uint, long, or ulong to a pointer, p,of any type except void*. Das Ergebnis p+n ist der Zeiger, der aus dem Hinzufügen von n * sizeof(p) to the address of p resultiert.The result p+n is the pointer resulting from adding n * sizeof(p) to the address of p. Auf ähnliche Weise ist p-n der Zeiger aus der Subtraktion von n * sizeof(p) von der Adresse von p.Similarly, p-n is the pointer resulting from subtracting n * sizeof(p) from the address of p.

Subtrahieren von ZeigernSubtracting Pointers

Sie können auch Zeiger des gleichen Typs subtrahieren.You can also subtract pointers of the same type. Das Ergebnis hat immer den Typ long.The result is always of the type long. Wenn z.B. p1 und p2 Zeiger des Typs pointer-type* sind, dann führt der p1-p2-Ausdruck zu:For example, if p1 and p2 are pointers of the type pointer-type*, then the expression p1-p2 results in:

((long)p1 - (long)p2)/sizeof(pointer_type)

Es werden keine Ausnahmen generiert, wenn die arithmetische Operation die Domänengrenzen des Zeigers überläuft, und das Ergebnis hängt von der Implementierung ab.No exceptions are generated when the arithmetic operation overflows the domain of the pointer, and the result depends on the implementation.

BeispielExample

// compile with: /unsafe
class PointerArithmetic
{
    unsafe static void Main() 
    {
        int* memory = stackalloc int[30];
        long difference;
        int* p1 = &memory[4];
        int* p2 = &memory[10];

        difference = p2 - p1;

        System.Console.WriteLine("The difference is: {0}", difference);
    }
}
// Output:  The difference is: 6

C#-ProgrammiersprachenspezifikationC# Language Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
Unsicherer Code und ZeigerUnsafe Code and Pointers
ZeigerausdrückePointer Expressions
C#-OperatorenC# Operators
Bearbeiten von ZeigernManipulating Pointers
ZeigertypenPointer types
TypenTypes
unsafeunsafe
fixed-Anweisungfixed Statement
stackallocstackalloc