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; void 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 cin.get(); }
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 << "-"; } } void main() { Vector vector1; vector1.cargar(); vector1.imprimir(); cin.get(); cin.get(); }Este proyecto lo puede descargar en un zip desde este enlace :PunteroOperador2.zip