Condividi tramite


Operazioni aritmetiche sui puntatori (Guida per programmatori C#)

In questo argomento viene illustrato l'utilizzo degli operatori aritmetici + e - per la gestione dei puntatori.

[!NOTA]

Non è possibile eseguire operazioni aritmetiche su puntatori a void.

Aggiunta e sottrazione di valori numerici a e da puntatori

È possibile aggiungere un valore n di tipo int, uint, long o ulong a un puntatore p,di qualsiasi tipo tranne void*.Il p+n restituito è il puntatore risultante dall'aggiunta di n * sizeof(p) to the address of p.Analogamente, p-n è il puntatore risultante dalla sottrazione di n * sizeof(p) dall'indirizzo di p.

Sottrazione di puntatori

È anche possibile sottrarre puntatori dello stesso tipo.Il risultato è sempre di tipo long.Se, ad esempio, p1 e p2 sono puntatori di tipo pointer-type*, l'espressione p1-p2 determinerà il seguente risultato:

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

Quando l'operazione aritmetica causa un overflow del dominio del puntatore, non vengono generate eccezioni e il risultato dipende dall'implementazione.

Esempio

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

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.

Vedere anche

Riferimenti

Codice unsafe e puntatori (Guida per programmatori C#)

Espressioni puntatore (Guida per programmatori C#)

Operatori [C#]

Modifica dei puntatori (Guida per programmatori C#)

Tipi di puntatori (Guida per programmatori C#)

unsafe (Riferimenti per C#)

Istruzione fixed (Riferimenti per C#)

stackalloc (Riferimenti per C#)

Concetti

Guida per programmatori C#

Altre risorse

Tipi (Riferimenti per C#)