Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
100% encontró este documento útil (1 voto)
475 vistas15 páginas

Punteros en C#

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 15

Grupo: 07T

PROGRAMACIN I
PUNTEROS EN C#

Los punteros son un tipo especial de variables


que tienen direcciones de memoria como sus
valores.

Concepto
Por ser una variable, aunque de tipo especial,
su declaracin no vara de gran forma con lo
estudiado hasta el momento.

La palabra "puntero" se usa para referirse a una


direccin de memoria.

Concepto

Lo que tiene de especial es que normalmente


un puntero tendr un tipo de datos asociado:
por ejemplo, un "puntero a entero" ser una
direccin de memoria en la que habr
almacenado (o podremos almacenar) un
nmero entero.

Para declarar un puntero debe utilizarse un tipo de


datos
Ejemplos:

Sintaxis
Si se desea declarar varios punteros en una misma lnea
de cdigo, C# permite hacerlo de la siguiente manera:

Punteros en
C#

El valor de cada variable en un programa de


ordenador se guarda en una seccin de
memoria cuyo tamao est determinado
por el tipo de dato de la variable.
La localizacin de esta seccin de memoria
es almacenada en la direccin de la variable.
Por tanto, es as como si cada variable
estuviera compuesta de dos partes: su valor
y su direccin de memoria.

Cada celda de memoria se puede considerar de


una parte con el contenido, y la otra parte que
se almacena en la direccin.

Punteros en
C#

Las direcciones se representan normalmente


por un nmero hexadecimal, pudiendo
contener un carcter, un entero o un real
(aunque en realidad todos son almacenados
como nmeros binarios, lo cual es ms
entendible para la mquina a la hora de
compilar los programas).

El operador de direccin (&) es un operador unario que


devuelve la direccin de memoria de su operando.
El operador de indireccn (*) regresa el valor del objeto
hacia el cual se apunta.

Operadores
para Punteros

Por ejemplo:
La instruccin: puntero = &y asigna la direccin de la
variable y a la variable del apuntador puntero.
Entonces, se dice que puntero apunta a y.
Ahora, puntero hace referencia de manera indirecta al
valor de la variable

Cdigo
Inseguro
(Unsafe Code)

Con unsafe code o cdigo inseguro nos


referimos a una regin de cdigo en la que est
permitida la declaracin y operaciones con
punteros.
La palabra clave para marcar un mtodo,
miembro o bloque es unsafe, como forma de
decir al compilador "s, s que este programa
tiene zonas no seguras, pero aun as quiero
compilarlo"

Los punteros se suelen utilizar para recorrer tablas de elementos


sin necesidad de tener que comprobarse que el ndice al que se
accede en cada momento se encuentra dentro de los limites de la
tabla.

Aritmtica de
punteros

Por ello, los operadores aritmticos definidos para los punteros


estn orientados a facilitar este tipo de recorridos.
Hay que tener en cuenta que todos los operadores aritmticos
aplicables a punteros dependen del tamao del tipo de dato
apuntado, por lo que no son aplicables a punteros void, ya que
estos no almacenan informacin sobre dicho tipo. Estos
operadores son ++ y --.

Existe una cierta aritmtica que es aplicable a los punteros y que


difiere a la aritmtica vista para los enteros y reales.
Las operaciones aritmticas admisibles para los punteros, son:

Aritmtica de
punteros

Sumarle o restarle un entero, obteniendo como resultado un


puntero del mismo tipo.
Restar dos punteros, obteniendo como resultado un entero.

Operaciones entre punteros y enteros.


La diferencia de la aritmtica de punteros con respecto a la vista
anteriormente es que los punteros se incrementan y decrementan
en funcin del tipo de dato al que apuntan.

La idea consiste en que si se le suma 1 a un puntero, el valor del


puntero apuntara al siguiente elemento en la memoria.

Uso de
punteros

Un puntero no puede sealar a una


referencia o a un struct que contenga
referencias, porque una referencia object
puede recolectarse como elemento no
utilizado aunque haya un puntero que la
seale.
El recolector de elementos no utilizados
no realiza un seguimiento de si algn tipo
de puntero seala a un objeto.

A continuacin
se muestran
ejemplos de
declaraciones
de tipos de
puntero:

Ejemplo

Descripcin

int* p

p es un puntero a un entero.

int** p

p es un puntero a un puntero a un
entero.

int*[] p

p es una matriz unidimensional de


punteros a enteros.

char* p

p es un puntero a un valor char.

void* p

p es un puntero a un tipo
desconocido.

Operador/Instruccin

En la tabla
siguiente se
muestran los
operadores e
instrucciones
que pueden
funcionar en
punteros en un
contexto no
seguro:

Uso

Realiza el direccionamiento indirecto


del puntero.

->

Obtiene acceso a un miembro de un


struct a travs de un puntero.

[]

Indiza un puntero.

&

Obtiene la direccin de una variable.

++ y --

Incrementa y disminuye los punteros.

+y-

Realiza aritmtica con punteros.

==, !=, <, >, <= y >=

Compara los punteros.

stackalloc

Asigna memoria en la pila.

Instruccin fixed

Fija provisionalmente una variable


para que pueda encontrarse su
direccin.

Ejemplo 1.

Ejemplo 2.

También podría gustarte