IntPtr.Add(IntPtr, Int32) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Agrega un desplazamiento a un entero con signo.
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
Parámetros
- pointer
-
IntPtr
nativeint
Entero con signo al que se va a agregar el desplazamiento.
- offset
- Int32
Desplazamiento que se va a sumar.
Devoluciones
nativeint
Nuevo entero con signo que refleja la adición de offset
a pointer
.
Ejemplos
En el ejemplo siguiente se crea una instancia de un IntPtr objeto que apunta al principio de una matriz de diez elementos y, a continuación, se llama al Add método para iterar los elementos de la matriz.
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
Comentarios
El Add método no produce una excepción si el resultado es demasiado grande para representarlo como un entero con signo en el proceso de ejecución. En su lugar, la operación de suma se realiza en un contexto no comprobado.
Los lenguajes que no admiten la sobrecarga de operadores o operadores personalizados pueden usar este método para agregar un desplazamiento al valor de un puntero.