jueves, 11 de agosto de 2011

Programación en C++/Punteros.."Aritmética de Punteros"


Aritmética de Punteros

Al usar punteros a matrices, hay que tener en cuenta que la aritmética cambia sensiblemente.


#include <iostream>

using std::cout;
using std::endl;

void main()
{
int X[6]={1, 2, 3, 4, 5, 6};
int*prtX;

prtX= X;// incializo el valor del puntero.

cout<< endl <<*prtX;
    prtX +=2;
cout<< endl <<*prtX;
    prtX -=2;
cout<< endl <<*prtX;
    prtX++;
cout<< endl <<*prtX;
}



En el siguiente código, primero se crea un puntero a un arreglo de 6 elementos y si inicializa el puntero prtX al primer elemento del arreglo X[0].


Si tenemos en cuenta que el siguiente ejemplo se ejecuta en una computadora con enteros de 4 bytes, el segundo elemento de la matriz tendrá en memoria un desplazamiento de 4 bytes, el 2 de ocho y asi sucesivamente. La operación prtX += 2;produce un desplazamiento llevándolo al 3 elemento dentro del arreglo.


Debe entenderse que prtX ahora apunta a una dirección de memoria y la instrucción cambia esta dirección de memoria sumándole 2 multiplicado por el tamaño del tipo de dato del arreglo que en este supuesto sería de 4. (dir = ( dir + 2 * 4 )), dando por resultado un desplazamiento de 8 bytes.


Sería igual que ejecutar la operaciónprtX = &X[2];. La operación prtX -= 2 obedece a la misma lógica estableciendo el puntero al primer elemento del array X[0] y el operador ++ modifica el puntero desplazándolo 4 bytes y asignándole el segundo elemento de la matriz.









No hay comentarios:

Publicar un comentario