04 diciembre 2006

Utilización de Stackalloc

Este ejercicio pasenlo a la computadora. Recuerden modificar el proyecto para que les permita utilizar código inseguro.

El programa si funciona!

Que hace?: Declaramos un vector del tipo int, y otro vector del tipo puntero. Guardamos el contenido del vector original en otro vector del tipo puntero. Declaramos otro puntero que apunta a la direccion fisica de memoria donde se ecuentra el vector original.


Guradamos en el vector puntero los datos del vector original y lo incrementamos para que pueda seguir guradando datos en la siguiente direccion del tipo int.

Al finalzar de llenarlo, recorremos otro puntero que contiene la direccion original del vector y lo recorremos con otro ciclo for al cual le hacemos un incremento.

Este ejemplo esta basado en el tema de Punteros parte 2 Operadr Stackalloc creacion de pilas


using System;

using System.Collections.Generic;

using System.Text;

namespace Punteros_ejemplos

{

class Program

{

unsafe static void Main(string[] args) // Aqui estoy poniendo el bloque inseguro.

{

int[] arreglo = new int[] { 1,3,4,5,6,7,6,4,3,2};// Un arreglo

int* pt = stackalloc int[10]; //Un puntero del tipo arreglo

int* ppt;// Un puntero sencillo

*pt = arreglo[0];// Aqui apuntamos a la direccion del primer elemento del arreglo

ppt = pt;// Igualamos las direcciones donde se encuentra el inicio del vector

for (int i = 0; i <>

{

*pt = arreglo[i];// Grabamos en esa direccion de memoria el contenido del primer elemento del vector

pt++;// Nos movemos en memoria la distancia del tipo int para poder grabar en el siguiente espacio

}

// Como ya movimos el puntero pt de su lugar de origen, vamos a utilizar el puntero ppt que se encuentra en el lugar

//de inicio del vector orignal, de esa forma lo podemos recorrer.

for (int i = 0; i <>

{

Console.WriteLine("el arreglo: {0}", *ppt);

ppt++;//En este lugar estamos recorriendo nuevamente directametne la memoria. Recordemos que el puntero ppt apuntaba a la direccion de un puntero tipo vector, el cual a su ves apuntaba directamente a un vector del tipo int. No olvidemos que cuando utilizamos el incremento ++, lo que estamos haciendo es incrementando una posicion en memoria del tamaño del tipo del puntero. En este caso es del tipo INT (entero).

}

Console.ReadLine();

}

}

}

No hay comentarios.: