IntPtr.Add(IntPtr, Int32) Metoda

Definicja

Dodaje przesunięcie do podpisanej liczby całkowitej.

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

Parametry

pointer
IntPtr

nativeint

Liczba całkowita ze znakiem, do których ma zostać dodane przesunięcie.

offset
Int32

Przesunięcie do dodania.

Zwraca

IntPtr

nativeint

Nowa podpisana liczba całkowita, która odzwierciedla dodanie offset elementu do pointerelementu .

Przykłady

Poniższy przykład tworzy wystąpienie IntPtr obiektu wskazującego początek tablicy dziesięć elementów, a następnie wywołuje Add metodę, aby iterować elementy w tablicy.

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

Uwagi

Metoda Add nie zgłasza wyjątku, jeśli wynik jest zbyt duży, aby reprezentować jako podpisaną liczbę całkowitą w procesie wykonywania. Zamiast tego operacja dodawania jest wykonywana w nieznakowanym kontekście.

Języki, które nie obsługują przeciążenia operatora lub operatory niestandardowe, mogą użyć tej metody, aby dodać przesunięcie do wartości wskaźnika.

Dotyczy

Zobacz też