C sharp Manejo de Punteros

Páginas: 6 (1386 palabras) Publicado: 26 de junio de 2013
MANIPULACIÓN DE PUNTEROS

1. Obtención de dirección de memoria. Operador &
Para almacenar una referencia a un objeto en un puntero se puede aplicar al objeto el operador prefijo &, que lo que hace es devolver la dirección que en memoria ocupa el objeto sobre el que se aplica. Un ejemplo de su uso para inicializar un puntero es:
int x =10;
int * px = &x;
Este operador no es aplicable aexpresiones constantes, pues éstas no se almacenan en ninguna dirección de memoria específica sino que se incrustan en las instrucciones. Por ello, no es válido hacer directamente:
int px = &10; // Error 10 no es una variable con dirección propia
Tampoco es válido aplicar & a campos readonly, pues si estos pudiesen ser apuntados por punteros se correría el riesgo de poderlos modificar ya que através de un puntero se accede a memoria directamente, sin tenerse en cuenta si en la posición accedida hay algún objeto, por lo que mucho menos se considerará si éste es de sólo lectura.
Lo que es sí válido es almacenar en un puntero es la dirección de memoria apuntada por otro puntero. En ese caso ambos punteros apuntarían al mismo objeto y las modificaciones a éste realizadas a través de unpuntero también afectarían al objeto visto por el otro, de forma similar a como ocurre con las variables normales de tipos referencia. Es más, los operadores relacionales típicos (==, !=, , =) se han redefinido para que cuando se apliquen entre dos punteros de cualesquiera dos tipos lo que se compare sean las direcciones de memoria que estos almacenan. Por ejemplo:

int x = 10;
int px = &x;int px2 = px; // px y px2 apuntan al objeto almacenado en x
Console.WriteLine( px == px2); // Imprime por pantalla True
En realidad las variables sobre las que se aplique & no tienen por qué estar inicializadas. Por ejemplo, es válido hacer:

private void f()
{
int x;
unsafe
{ int px = &x;}
}
Esto se debe a que uno de los principales usos de los punteros en C# es poderlospasar como parámetros de funciones no gestionadas que esperen recibir punteros. Como muchas de esas funciones han sido programadas para inicializar los contenidos de los punteros que se les pasan, pasarles punteros inicializados implicaría perder tiempo innecesariamente en inicializarlos.

2. Acceso ha contenido de puntero. Operador *
Un puntero no almacena directamente un objeto sino que suelealmacenar la dirección de memoria de un objeto (o sea, apunta a un objeto) Para obtener a partir de un puntero el objeto al que apunta hay que aplicarle al mismo el operador prefijo *, que devuelve el objeto apuntado. Por ejemplo, el siguiente código imprime en pantalla un 10:

int x = 10;
int * px= &x;
Console.WriteLine(*px);
Es posible en un puntero almacenar null para indicar que noapunta a ninguna dirección válida. Sin embargo, si luego se intenta acceder al contenido del mismo a través del operador * se producirá generalmente una excepción de tipo NullReferenceException (aunque realmente esto depende de la implementación del lenguaje) Por ejemplo:

int * px = null;
Console.WriteLine(*px); // Produce una NullReferenceException
No tiene sentido aplicar * a un puntero detipo void * ya que estos punteros no almacenan información sobre el tipo de objetos a los que apuntan y por tanto no es posible recuperarlos a través de los mismos ya que no se sabe cuánto espacio en memoria a partir de la dirección almacenada en el puntero ocupa el objeto apuntado y, por tanto, no se sabe cuanta memoria hay que leer para obtenerlo.

3. Acceso a miembro de contenido de puntero.Operador ->
Si un puntero apunta a un objeto estructura que tiene un método F() sería posible llamarlo a través del puntero con:

(*objeto).F();
Sin embargo, como llamar a objetos apuntados por punteros es algo bastante habitual, para facilitar la sintaxis con la que hacer esto se ha incluido en C# el operador ->, con el que la instrucción anterior se escribiría así:

objeto->f();
Es...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Manejo Xml Con C Sharp
  • Punteros en c++
  • C Sharp
  • C sharp
  • C SHARP
  • C Sharp
  • caracteristicas de c sharp
  • Consola C Sharp

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS