Operaciones aritméticas en punteros (Guía de programación de C#)

En este tema se describe el uso de los operadores aritméticos + y - para manipular punteros.

Nota

No se pueden realizar operaciones aritméticas en punteros void.

Suma y resta de valores numéricos a punteros

Se puede sumar un valor n de tipo int, uint, long o ulong a un puntero, p, de cualquier tipo excepto void*. El p+n resultante es el puntero que resulta de sumar n * sizeof(p) to the address of p. De forma similar, p-n es el puntero resultante de restar n * sizeof(p) de la dirección de p.

Restar punteros

También se pueden restar punteros del mismo tipo. El resultado siempre es de tipo long. Por ejemplo, si p1 y p2 son punteros de tipo pointer-type*, la expresión p1-p2 da como resultado:

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

No se genera ninguna excepción cuando la operación aritmética desborda el dominio del puntero y el resultado depende de la implementación.

Ejemplo

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

Especificación del lenguaje C#

Para obtener más información, consulte la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también

Guía de programación de C#
Código no seguro y punteros
Expresiones de puntero
Operadores de C#
Manipulación de punteros
Tipos de puntero
Tipos
unsafe
fixed (instrucción)
stackalloc