IntPtr.Add(IntPtr, Int32) Метод

Определение

Добавляет смещение к значению указателя.Adds an offset to the value of a pointer.

public:
 static IntPtr Add(IntPtr pointer, int offset);
public static IntPtr Add (IntPtr pointer, int offset);
static member Add : nativeint * int -> nativeint
Public Shared Function Add (pointer As IntPtr, offset As Integer) As IntPtr

Параметры

pointer
IntPtr

Указатель, к которому требуется добавить смещение.The pointer to add the offset to.

offset
Int32

Добавляемое смещение.The offset to add.

Возвращаемое значение

IntPtr

Новый указатель, получающийся при добавлении смещения offset к указателю pointer.A new pointer that reflects the addition of offset to pointer.

Примеры

В следующем примере создается экземпляр IntPtr объекта, который указывает на начало массива из десяти элементов, а затем вызывает Add метод для итерации элементов в массиве.The following example instantiates an IntPtr object that points to the beginning of a ten-element array, and then calls the Add method to iterate the elements in the array.

using System;
using System.Runtime.InteropServices;

public class Example
{
   public static void Main()
   {
      int[] arr = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
      unsafe {
         fixed(int* parr = arr) {
            IntPtr ptr = new IntPtr(parr);
            // Get the size of an array element.
            int size = sizeof(int);
            for (int ctr = 0; ctr < arr.Length; ctr++)
            {
               IntPtr newPtr = IntPtr.Add(ptr, ctr * size);
               Console.Write("{0}   ", Marshal.ReadInt32(newPtr));
            }
         }
      }
   }
}
// The example displays the following output:
//       2   4   6   8   10   12   14   16   18   20
Imports System.Runtime.InteropServices

Module Example
   Public Sub Main()
      Dim arr() As Integer = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 }
      Dim ptr As IntPtr = Marshal.UnsafeAddrOfPinnedArrayElement(arr, 0)

      For ctr As Integer= 0 To arr.Length - 1
         Dim newPtr As IntPtr = IntPtr.Add(ptr, ctr * Len(arr(0)))
         Console.Write("{0}   ", Marshal.ReadInt32(newPtr))
      Next
   End Sub
End Module
' The example displays the following output:
'       2   4   6   8   10   12   14   16   18   20

Комментарии

AddМетод не создает исключение, если результат слишком велик для представления в качестве указателя на указанной платформе.The Add method does not throw an exception if the result is too large to represent as a pointer on the specified platform. Вместо этого операция сложения выполняется в непроверяемом контексте.Instead, the addition operation is performed in an unchecked context.

Языки, не поддерживающие перегрузку операторов или пользовательские операторы, могут использовать этот метод для добавления смещения к значению указателя.Languages that do not support operator overloading or custom operators can use this method to add an offset to the value of a pointer.

Применяется к

См. также раздел