Поделиться через


Арифметические операции над указателями (Руководство по программированию в C#)

Обновлен: Ноябрь 2007

В этом разделе рассматривается использование арифметических операторов + и - для управления указателями.

25ckw473.alert_note(ru-ru,VS.90).gifПримечание.

Невозможно выполнять арифметические операции над указателями типа "void".

Сложение и вычитание числовых значений из указателей

Можно сложить значение n типа int, uint, long или ulong с указателем p, любого типа, кроме void*. В результате p+n получится указатель, являющийся суммой n * sizeof(p) to the address of p. Аналогично, результатом p-n является указатель, полученный вычитанием n * sizeof(p) из адреса p.

Вычитание указателей

Также можно вычитать указатели одного типа. Тип результата всегда long. Например, если p1 и p2 являются указателями типа pointer-type*, то результат выражения p1-p2 будет следующим:

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

При переполнении домена указателя в результате выполнения арифметической операции исключений не генерируется, а результат зависит от конкретной реализации.

Пример

// 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 = (long*)(p2 - p1);

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

Спецификация языка C#

Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:

  • 18.5.6 Арифметические операции над указателями

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Небезопасный код и указатели (Руководство по программированию в C#)

Выражения указателей (Руководство по программированию на C#)

Операторы C#

Управление указателями. (Руководство по программированию в C#)

Типы указателей (руководство по программированию в C#)

unsafe (Справочник по C#)

Оператор fixed (Справочник по C#)

stackalloc (Справочник по C#)

Другие ресурсы

Типы (справочник по C#)