Арифметические операции над указателями (Руководство по программированию в C#)
Обновлен: Ноябрь 2007
В этом разделе рассматривается использование арифметических операторов + и - для управления указателями.
Примечание. |
---|
Невозможно выполнять арифметические операции над указателями типа "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#)
Оператор fixed (Справочник по C#)