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を反映する新しい符号付き整数。

次の例では、10 要素配列の先頭を指すオブジェクトをインスタンス化 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 例外をスローしません。 代わりに、追加操作はオフのコンテキストで実行されます。

演算子のオーバーロードまたはカスタム演算子をサポートしていない言語では、このメソッドを使用してポインターの値にオフセットを追加できます。

適用対象

こちらもご覧ください