// OrtizOL - xCSw - http://ortizol.blogspot.com
using System;
public class BasicosPunteros
{
public static void Main()
{
Console.WriteLine(Environment.NewLine);
// Declaración de un arreglo de enteros como objetos
// (managed code):
int[] arreglo = new int[5] {100, 200, 300, 400, 500};
// El uso de punteros requiere marcar la siguiente
// region con la palabra clave unsafe:
unsafe
{
// Evita que el colector de basura relocalice una variable
// desplazable:
fixed(int* puntero1 = &arreglo[0])
{
// Creación de un nuevo puntero para incrementar la ubicación de memoria:
int* puntero2 = puntero1;
// Muestra el valor de la memoria apuntada por `puntero2`:
Console.WriteLine(*puntero2);
// Incrementa en 1 la región de memoria apuntada por `puntero2`:
puntero2 += 1;
// Se muestra el valor del segundo elemento de `arreglo`:
Console.WriteLine(*puntero2);
// Incrementa en 1 la región de memoria apuntada por `puntero2`:
puntero2 += 1;
// Se muestra el valor del tercer elemento de `arreglo`:
Console.WriteLine(*puntero2);
Console.WriteLine("-----------");
// Se muestra el valor actual apuntado por `puntero1`:
Console.WriteLine(*puntero1);
// Incrementa en una unidad el valor de la región de memoria
// apuntada por `puntero1`:
*puntero1 += 1;
// Muestra el valor del primer elemento de `arreglo`:
Console.WriteLine(*puntero1);
// Incrementa en una unidad el valor de la región de memoria
// apuntada por `puntero1`:
*puntero1 += 1;
// Muestra el valor del primer elemento de `arreglo`:
Console.WriteLine(*puntero1);
}
}
Console.WriteLine(Environment.NewLine);
Console.WriteLine("-----------");
// Por fuera de la región de código inseguro:
Console.WriteLine(arreglo[0]);
Console.WriteLine(Environment.NewLine);
}
}