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

Определение

Добавляет смещение в целое число со знаком.

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

nativeint

Целое число со знаком для добавления смещения.

offset
Int32

Смещение для добавления.

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

IntPtr

nativeint

Новое целое число со знаком, которое отражает добавление offsetpointerв .

Примеры

В следующем примере создается IntPtr экземпляр объекта, который указывает на начало десятиэлемерного массива, а затем вызывает Add метод для итерации элементов в массиве.

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
#nowarn "9"
open System
open System.Runtime.InteropServices
open FSharp.NativeInterop

[<EntryPoint>]
let main _ =
    let mutable arr = 
        [| 2; 4; 6; 8; 10; 12; 14; 16; 18; 20 |]
    
    use parr = fixed arr
    
    let ptr = NativePtr.toNativeInt parr

    // Get the size of an array element.
    let size = sizeof<int>
    for i = 0 to arr.Length - 1 do
        let newPtr = IntPtr.Add(ptr, i * size)
        printf $"{Marshal.ReadInt32 newPtr}   "
    0

// 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 не создает исключение, если результат слишком велик, чтобы представить как целое число со знаком в процессе выполнения. Вместо этого операция добавления выполняется в незаверяемом контексте.

Языки, которые не поддерживают перегрузку операторов или пользовательские операторы, могут использовать этот метод для добавления смещения к значению указателя.

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

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