Vous êtes sur la page 1sur 3

Programacin I

Facultad: Ingeniera
Escuela: Ingeniera en Computacin
Asignatura: Programacin I

Guia#10: Tema: Aritmtica de Punteros en C#.


Objetivos
Conocer los conceptos de aritmtica de punteros y punteros a funciones.
Desarrollar aplicaciones que utilicen aritmtica de punteros.
Desarrollar aplicaciones que utilicen punteros a funciones.

Introduccin

Los punteros se suelne utilizar para recorrer tablas de elementos sin necesidad de tener que comprobarse
que el indice al que se accede en cada momento se encuentra dentro de los limites de la tabla. Por ello, los
operadores aritmeticos definidos para los punteros estan orientados a facilitar este tipo de recorridos.
Hay que tenr en cuenta que todos los operadores aritmeticos 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 informacion
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:
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.

Programacin I

Material y Equipo

Gua de laboratorio No. 10.


Computadora con Visual Studio 2013 o superior.
Dispositivo de almacenamiento (USB).

Procedimiento
G10 Ejemplo1
Comprobacin de la aritmtica de punteros:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Guia10_Ejemplo1
{
class Program
{
unsafe static void Main(string[] args)
{
Console.Title = "Programa de puntero en un vector";
int[] Array = new int[] { 1, 2, 3, 4, 5, 6 };
fixed(int *Ptr = &Array[0])
{
Console.WriteLine("Valor inicial del puntero es: " + (int)*Ptr);
//Desplazamos el puntero en 2 casillas de memoria
*Ptr = *Ptr + 2;
Console.WriteLine("Puntero desplazado en dos casilla es: " + (int)*Ptr);
*Ptr = *Ptr - 2;
Console.WriteLine("Puntero regresado a la primer casilla es: " + (int)*Ptr);
*Ptr = *Ptr + 1;
Console.WriteLine("Puntero desplazado en una casilla es: " + (int)*Ptr);
}
Console.ReadKey();
}
}
}

G10 Ejemplo2
En este ejemplo veremos la relacin que hay entre arreglos y punteros:
1
2
3

using System;
using System.Collections.Generic;
using System.Linq;

Programacin I
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

using System.Text;
using System.Threading.Tasks;
namespace Guia10_Ejemplo2
{
class Program
{
unsafe static void Main(string[] args)
{
Console.Title = "Segundo ejemplo de punteros con un vector con letras";
int contador = 0;
int entero = 5;
int *puntero;
puntero = &entero;
int temporal = *puntero;
*puntero = 3;
Console.WriteLine("El valor de [puntero] es: " + *puntero);
Console.WriteLine("El valor de la variable [entero] es: " + entero);
char[] texto = new char[] {'H', 'o','l','a' };
fixed (char* cadena = &texto[0])
{
for (int j = 0; j < 4; j++)
{
if (cadena[j] == 'o')
{
contador = contador + 1;
}
}
Console.WriteLine("\nEl primer caracter de la cadena es: " + cadena[0]);
Console.WriteLine("La cadena tiene [" + contador + "] letras o");
}
Console.ReadKey();
}
}

37

Analisis de Resultados
Explicar el cdigo del ejemplo 2, haciendo nfasis en la instruccin fixed.

Investigacion Complementaria
Investigar sobre el uso de estructuras en C#.

Bibliografia
Deitel, Harvey M. y Paul J. Deitel, Cmo Programar en C#, Segunda Edicin, Mxico, 2007.

Vous aimerez peut-être aussi