IntPtr.Add(IntPtr, Int32) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Ajoute un décalage à un entier signé.
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
Paramètres
- pointer
-
IntPtr
nativeint
Entier signé auquel ajouter le décalage.
- offset
- Int32
Offset à ajouter.
Retours
nativeint
Nouvel entier signé qui reflète l’ajout de offset
à pointer
.
Exemples
L’exemple suivant instancie un IntPtr objet qui pointe vers le début d’un tableau à dix éléments, puis appelle la Add méthode pour itérer les éléments du tableau.
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
Remarques
La Add méthode ne lève pas d’exception si le résultat est trop grand pour être représenté sous la forme d’un entier signé dans le processus en cours d’exécution. Au lieu de cela, l’opération d’ajout est effectuée dans un contexte non vérifié.
Les langages qui ne prennent pas en charge la surcharge d’opérateur ou les opérateurs personnalisés peuvent utiliser cette méthode pour ajouter un décalage à la valeur d’un pointeur.