IntPtr.Subtract(IntPtr, Int32) Methode

Definition

Subtrahiert einen Offset vom Wert eines Zeigers.Subtracts an offset from the value of a pointer.

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

Parameter

pointer
IntPtr

Der Zeiger, von dem der Offset subtrahiert werden soll.The pointer to subtract the offset from.

offset
Int32

Der Offset, der subtrahiert werden soll.The offset to subtract.

Gibt zurück

Ein neuer Zeiger, der die Subtraktion von offset von pointer widerspiegelt.A new pointer that reflects the subtraction of offset from pointer.

Beispiele

Im folgenden Beispiel wird ein IntPtr -Objekt instanziiert, das auf das Ende eines Arrays mit zehn Elementen zeigt. Anschließend wird die Subtract -Methode aufgerufen, um die Elemente im Array in umgekehrter Reihenfolge zu durchlaufen.The following example instantiates an IntPtr object that points to the end of a ten-element array, and then calls the Subtract method to iterate the elements in the array in reverse order.

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};
      // Get the size of a single array element.
      int size = sizeof(int);
      unsafe {
         fixed(int* pend = &arr[arr.GetUpperBound(0)]) {
            IntPtr ptr = new IntPtr(pend);
            for (int ctr = 0; ctr < arr.Length; ctr++)
            {
               IntPtr newPtr = IntPtr.Subtract(ptr, ctr * size);
               Console.Write("{0}   ", Marshal.ReadInt32(newPtr));
            }
         }
      }
   }
}
// The example displays the following output:
//       20   18   16   14   12   10   8   6   4   2
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, arr.Length - 1)
      Dim size As Integer = Len(arr(0))

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

Hinweise

Die Subtract -Methode löst keine Ausnahme aus, wenn das Ergebnis zu klein ist, um als Zeiger auf der angegebenen Plattform dargestellt zu werden.The Subtract method does not throw an exception if the result is too small to represent as a pointer on the specified platform. Stattdessen wird die Subtraktions Operation in einem nicht überprüften Kontext ausgeführt.Instead, the subtraction operation is performed in an unchecked context.

Sprachen, die das Überladen von Operatoren oder benutzerdefinierte Operatoren nicht unterstützen, können mit dieser Methode einen Offset vom Wert eines Zeigers subtrahieren.Languages that do not support operator overloading or custom operators can use this method to subtract an offset from the value of a pointer.

Gilt für:

Siehe auch