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 altre informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.
Vedere anche
Riferimenti
Codice unsafe e puntatori (Guida per programmatori C#)
Espressioni puntatore (Guida per programmatori C#)
Modifica dei puntatori (Guida per programmatori C#)
Tipi di puntatori (Guida per programmatori C#)
Istruzione fixed (Riferimenti per C#)
stackalloc (Riferimenti per C#)