Los operadores de incremento y decremento ++ y -- pueden utilizarse con punteros.
Estos operadores aplicados a un puntero incrementan o decrementan la dirección que contiene el puntero según el tipo de dato a que apunta.
Si a un puntero a entero le aplicamos el operador ++, incrementa la dirección en 4 bytes (puede depender del sistema operativo). Si este puntero a entero almacena la dirección 5000, al aplicarle el operador ++ sucesivamente la dirección irá aumentando 5004, 5008, 5012, 5016, etc.
Si a un puntero a float le aplicamos el operador ++, incrementa la dirección en 4 bytes (puede depender del sistema operativo). Si este puntero almacena la dirección 5000, al aplicarle el operador ++ sucesivamente la dirección irá aumentando 5004, 5008, 5012, etc.
Si a un puntero a char le aplicamos el operador --, decrementa la dirección en 1 byte (puede depender del sistema operativo). Si este puntero almacena la dirección 5000, al aplicarle el operador -- sucesivamente la dirección irá disminuyendo: 4009, 4008, 4007, 4006, etc.
#include<iostream>
using namespace std;
int main()
{
char cad[5];
strcpy_s(cad, 5, "Sol");
char *pc;
pc = cad;
cout << pc; //imprime Sol
cout << "\n";
pc++;
cout << pc; //imprime ol
cout << "\n";
pc++;
cout << pc; //imprime l
cout << "\n";
pc--;
cout << pc; //imprime ol
cout << "\n";
int x[5] = { 10, 50, 100, 99, 33 };
int *pe;
pe = &x[3];
cout << *pe; //imprime 99
cout << "\n";
pe--;
cout << *pe; //imprime 100
return 0;
}
Este proyecto lo puede descargar en un zip desde este enlace : PunteroOperador1.zip
Seguimiento del ejemplo:
- Definimos una cadena:
char cad[5];
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 [0]
1005 [1]
1006 [2]
1007 [3]
1008 [4]
- Cargamos la cadena:
strcpy_s (cad, 5, "Sol");
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 'S' [0]
1005 'o' [1]
1006 'l' [2]
1007 '\0' [3]
1008 [4]
- Definimos un puntero a char:
char *pc;
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 'S' [0]
1005 'o' [1]
1006 'l' [2]
1007 '\0' [3]
1008 [4]
1009 pc
- Le asignamos al puntero el contenido de la cadena:
pc=cad;
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 'S' [0]
1005 'o' [1]
1006 'l' [2]
1007 '\0' [3]
1008 [4]
1009 1004 pc
- Imprimimos donde apunta el puntero:
cout<<pc; //imprime Sol
Imprime desde la dirección 1004 hasta encontrar el terminador de cadena.
- Incrementamos el puntero:
pc++;
La dirección se incrementa en 1.
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 'S' [0]
1005 'o' [1]
1006 'l' [2]
1007 '\0' [3]
1008 [4]
1009 1005 pc
- Imprimimos donde apunta el puntero:
cout<<pc; //imprime ol
Imprime desde la dirección 1005 hasta encontrar el terminador de cadena.
- Incrementamos el puntero:
pc++;
La dirección se incrementa en 1.
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 'S' [0]
1005 'o' [1]
1006 'l' [2]
1007 '\0' [3]
1008 [4]
1009 1006 pc
- Imprimimos donde apunta el puntero:
cout <<pc; //imprime l
Imprime desde la dirección 1006 hasta encontrar el terminador de cadena.
- Decrementamos el puntero:
pc--;
La dirección se decrementa en 1.
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 'S' [0]
1005 'o' [1]
1006 'l' [2]
1007 '\0' [3]
1008 [4]
1009 1005 pc
- Imprimimos donde apunta el puntero:
cout <<pc; //imprime ol
Imprime desde la dirección 1005 hasta encontrar el terminador de cadena.
- Definimos e inicializamos un vector de enteros:
int x[5] ={10,50,100,99,33};
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 'S' [0]
1005 'o' [1]
1006 'l' [2]
1007 '\0' [3]
1008 [4]
1009 1005 pc
1013 1017 x
1017 10 [0]
1021 50 [1]
1025 100 [2]
1029 99 [3]
1033 33 [4]
- Definimos un puntero a entero:
int *pe;
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 'S' [0]
1005 'o' [1]
1006 'l' [2]
1007 '\0' [3]
1008 [4]
1009 1005 pc
1013 1017 x
1017 10 [0]
1021 50 [1]
1025 100 [2]
1029 99 [3]
1033 33 [4]
1037 pe
- Le asignamos al puntero la dirección de la cuarta componente del vector:
pe = &x[3];
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 'S' [0]
1005 'o' [1]
1006 'l' [2]
1007 '\0' [3]
1008 [4]
1009 1005 pc
1013 1017 x
1017 10 [0]
1021 50 [1]
1025 100 [2]
1029 99 [3]
1033 33 [4]
1037 1029 pe
- Imprimimos donde apunta el puntero:
cout<<*pe; //99
- Decrementamos el puntero:
pc--;
La dirección se decrementa en 4.
Dir. de Mem. Contenido Nombre de variable
1000 1004 cad
1004 'S' [0]
1005 'o' [1]
1006 'l' [2]
1007 '\0' [3]
1008 [4]
1009 1005 pc
1013 1017 x
1017 10 [0]
1021 50 [1]
1025 100 [2]
1029 99 [3]
1033 33 [4]
1037 1025 pe
- Imprimimos donde apunta el puntero:
cout<<*pe; //imprime 100
#include<iostream>
using namespace std;
class Vector {
int vec[5];
public:
void cargar();
void imprimir();
};
void Vector::cargar()
{
for (int f = 0; f < 5; f++)
{
cout << "Ingrese componente:";
cin >> vec[f];
}
}
void Vector::imprimir()
{
int *pe;
pe = vec;
for (int f = 0; f < 5; f++)
{
cout << *pe;
pe++;
cout << "-";
}
}
int main()
{
Vector vector1;
vector1.cargar();
vector1.imprimir();
return 0;
}
Este proyecto lo puede descargar en un zip desde este enlace :PunteroOperador2.zip