IntPtr.Subtract(IntPtr, Int32) 메서드


포인터의 값에서 오프셋을 뺍니다.Subtracts an offset from the value of a pointer.

 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

매개 변수


오프셋을 뺄 포인터입니다.The pointer to subtract the offset from.


뺄 오프셋입니다.The offset to subtract.



offset에서 pointer 빼기를 반영하는 새 포인터입니다.A new pointer that reflects the subtraction of offset from pointer.


다음 예제에서는 IntPtr 10 개 요소 배열의 끝을 가리키는 개체를 인스턴스화한 다음 메서드를 호출 Subtract 하 여 배열의 요소를 역순으로 반복 합니다.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))
   End Sub
End Module
' The example displays the following output:
'       20   18   16   14   12   10   8   6   4   2


Subtract결과가 너무 작아 지정 된 플랫폼에 대 한 포인터로 나타낼 수 없는 경우 메서드는 예외를 throw 하지 않습니다.The Subtract method does not throw an exception if the result is too small to represent as a pointer on the specified platform. 대신, 빼기 연산은 unchecked 컨텍스트에서 수행 됩니다.Instead, the subtraction operation is performed in an unchecked context.

연산자 오버 로드 또는 사용자 지정 연산자를 지원 하지 않는 언어는이 메서드를 사용 하 여 포인터의 값에서 오프셋을 뺄 수 있습니다.Languages that do not support operator overloading or custom operators can use this method to subtract an offset from the value of a pointer.

적용 대상

추가 정보