IntPtr.Add(IntPtr, Int32) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menambahkan offset ke bilangan bulat yang ditandatangani.
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
Parameter
- pointer
-
IntPtr
nativeint
Bilangan bulat yang ditandatangani untuk menambahkan offset.
- offset
- Int32
Offset yang akan ditambahkan.
Mengembalikan
nativeint
Bilangan bulat bertanda tangan baru yang mencerminkan penambahan offset ke pointer.
Contoh
Contoh berikut membuat instans IntPtr objek yang menunjuk ke awal array sepuluh elemen, lalu memanggil Add metode untuk melakukan iterasi elemen dalam array.
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
Keterangan
Metode Add ini tidak memberikan pengecualian jika hasilnya terlalu besar untuk diwakili sebagai bilangan bulat yang ditandatangani dalam proses eksekusi. Sebagai gantinya, operasi penambahan dilakukan dalam konteks yang tidak dicentang.
Bahasa yang tidak mendukung kelebihan beban operator atau operator kustom dapat menggunakan metode ini untuk menambahkan offset ke nilai pointer.