Estrellamos el menu (on = habilitado y off=inhabilitado[proximamente]) .. Sigue Mandando tus susper mensajitos....en guate-->. claro tigo telefonica

Buscar

¡Haga de esta pagina su inicial!

Sitios Encontrados

jueves, 28 de mayo de 2009

Los apuntadores

En hora buena([Capeones]FOrca BARca 2-0 vrs Manchester ).
Aca empezaremos a estudiar una de las caracteristicas mas poderosas del lenguaje de programacion de C++ : el "apuntador" que es una de las capasidades de C++ mas dificiles de dominar. Los apuntadores permiten a los programas simular la llamada por referencia y crear y manipular estructuras dinamicas de datos, es decir, estructuras de datos que pueden crecer y encogerse, como listas vinculadas, colas, pilas y arboles. Las varibles de de apuntador contiene direcciones de memoria como sus valores. Normalmente las variables contienen valores especificos. por otra parte, los apuntadores contienen direcciones de variables que contienen valores especificos. En este sentido , los nombres de varibles hacen referencia directa a un valor y los apuntadores hacen referencia indirecta a un valor.La referencia a un valor atravez de un apuntador se llama indireccion.
Seguramente has de preguntarte y que pasa con C# : pues ya que lo pensastes primero debemos saber que para mantener la seguridad de tipos y la seguridad, C# de manera predeterminada no admite la aritmética con punteros. Sin embargo, utilizando la palabra clave "unsafe", es posible definir un contexto no seguro en el que se pueden utilizar punteros de un modo muy similar a como se hace en C++.
(Para habilitar esta opcion del compilador en el entorno de desarrollo de Visual Studio debes hacer lo siguiente:
1.- Abra la página Propiedades del proyecto.
2.- Haga clic en la página de propiedades GENERAR o BUILD.
3.- Active la casilla de verificación "Permitir código no seguro" o "Allow unsafe code")
Nota SUPER IMPORTANTE :
En el Common Language Runtime (CLR), se hace referencia al código no seguro como código no comprobable. El código no seguro en C# [NO ES necesariamente PELIGROSO]; simplemente es código cuya seguridad No puede ser comprobada por el CLR. Por consiguiente, el CLR sólo ejecutará código no seguro si se encuentra en un ensamblado de plena confianza.Si utiliza el código no seguro,[ES TU RESPONSABILIDAD garantizar que tu código no introduce riesgos de seguridad o errores de puntero].
Debes tomar en cuenta los iguiente, sin enbargo :
En C# no se permite derreferenciar punteros void*, ni tampoco se pueden efectuar operaciones aritméticas sobre punteros void*. La sintaxis void* se ha mantenido simplemente porcompatibilidad descendente, para llamar a funciones externas de la API de Windows que exigen punteros void* como parámetros.
Los punteros no pueden apuntar a tipos-referencia (clases o arrays). Tampoco pueden apuntar a estructuras que contengan tipos-referencia como miembros. Esto es un intento de proteger los datos utilizados por el motor de ejecución .NET y el recolector de basura (aunque en C#, como en C++,una vez que Ud. comienza a utilizar punteros casi siempre encontrará un modo de salvar cualquier restricción realizando operaciones aritméticas sobre los punteros y luego derreferenciando).
Además de declarar las partes relevantes de su código como no seguras, Ud. deberá especificar la opción /unsafe al compilador al compilar código que trabaje con punteros.
Los punteros no pueden apuntar a variable que estén embebidas en tipos-referencia (por ejemplo,miembros de clases),a menos que el puntero esté declarado en un bloque fixed.
para C++ y C# seria asi: foto + grande

Bueno a manera de complemento a esto seguramente te preguntas, si C# de manera predeterminada no admite la aritmética con punteros como lo trabaja? la respuesta seria x medio de un delegado en C# que no tiene equivalente directo en C++,y realiza las mismas funciones que un puntero a función en C++. La idea es que un delegado es un puntero a método, encapsulado en una clase especializada conjuntamente con una referencia al objeto al que el método será aplicado(en el caso de un método de instancia, o la referencia nula en el caso de un método estático).Esto implica que, a diferencia de un puntero a función de C++, un delegado de C# contiene suficiente información parallamar a un método de instancia.Formalmente, un delegado es una clase que se deriva de la clase System.Delegate. Por lo tanto, instanciar un delegado es un proceso de dos fases: la definición de esta clase derivada, y la declaración de una variabledel tipo apropiado. La definición de una clase-delegado incluye los detalles de la signatura (incluyendo el tipodel valor a devolver) del método que el delegado encapsula.La utilización principal de los delegados consiste en pasar de un método a otro las referencias a métodos ypermitir las llamadas indirectas: las referencias a métodos no pueden ser pasadas como parámetros directamente, pero sí como parte de un delegado. Los delegados aseguran la seguridad de tipos, y evitan las llamadas a métodos con signaturas incorrectas. El método contenido en el delegado puede ser llamado a través del delegado.

No hay comentarios: