Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. // OrtizOL - xCSw - http://ortizol.blogspot.com
  2.  
  3. using System;
  4.  
  5. public class BasicosPunteros
  6. {
  7.     public static void Main()
  8.     {
  9.         Console.WriteLine(Environment.NewLine);
  10.        
  11.         // Declaración de un arreglo de enteros como objetos
  12.         // (managed code):
  13.         int[] arreglo = new int[5] {100, 200, 300, 400, 500};
  14.        
  15.         // El uso de punteros requiere marcar la siguiente
  16.         // region con la palabra clave unsafe:
  17.         unsafe
  18.         {
  19.             // Evita que el colector de basura relocalice una variable
  20.             // desplazable:
  21.             fixed(int* puntero1 = &arreglo[0])
  22.             {
  23.                 // Creación de un nuevo puntero para incrementar la ubicación de memoria:
  24.                 int* puntero2 = puntero1;
  25.                
  26.                 // Muestra el valor de la memoria apuntada por `puntero2`:
  27.                 Console.WriteLine(*puntero2);
  28.                
  29.                 // Incrementa en 1 la región de memoria apuntada por `puntero2`:
  30.                 puntero2 += 1;
  31.                
  32.                 // Se muestra el valor del segundo elemento de `arreglo`:
  33.                 Console.WriteLine(*puntero2);
  34.                
  35.                 // Incrementa en 1 la región de memoria apuntada por `puntero2`:
  36.                 puntero2 += 1;
  37.                
  38.                 // Se muestra el valor del tercer elemento de `arreglo`:
  39.                 Console.WriteLine(*puntero2);
  40.                
  41.                 Console.WriteLine("-----------");
  42.                
  43.                 // Se muestra el valor actual apuntado por `puntero1`:
  44.                 Console.WriteLine(*puntero1);
  45.                
  46.                 // Incrementa en una unidad el valor de la región de memoria
  47.                 // apuntada por `puntero1`:
  48.                 *puntero1 += 1;
  49.                
  50.                 // Muestra el valor del primer elemento de `arreglo`:
  51.                 Console.WriteLine(*puntero1);
  52.                
  53.                 // Incrementa en una unidad el valor de la región de memoria
  54.                 // apuntada por `puntero1`:
  55.                 *puntero1 += 1;
  56.                
  57.                 // Muestra el valor del primer elemento de `arreglo`:
  58.                 Console.WriteLine(*puntero1);
  59.             }
  60.         }
  61.        
  62.         Console.WriteLine(Environment.NewLine);
  63.         Console.WriteLine("-----------");
  64.        
  65.         // Por fuera de la región de código inseguro:
  66.         Console.WriteLine(arreglo[0]);
  67.        
  68.         Console.WriteLine(Environment.NewLine);
  69.     }
  70. }