Está en la página 1de 8

Universidad Nacional Experimental de los Llanos Occidentales Ezequiel Zamora

(Unellez)
Barinas Edo. Barinas

Punteros en C++
Profesor: Marco Tulio Jerez
Leonardo Contreras
C.I 25450183
Algoritmo y Programacin II

Que es un Puntero?

Un puntero es una variable que contiene la direccin de otra variable.


Tambin podramos decir que un puntero es una variable que representa la posicin (ms que el valor)
de otro dato, tal como una variable o un elemento de un array.
Cuando una variable puntero es definida, el nombre de la variable debe ir precedido de un asterisco (*).
Este identifica que la variable es un puntero. Por tanto, una declaracin de puntero puede ser escrita en
tminos generales como:
int* pint; //Declara un puntero a entero
char* pchar; //Puntero a char
fecha* pfecha; //Puntero a objeto de clase 'fecha'
La clave est en que no hay una palabra clave, valga la redundancia, para definir a los tipos punteros sino que segn
sea el tipo de direccin que va a almacenar ese sera el tipo aadiendo el operador *.
Por ejemplo si yo quiero crear un puntero que almacene una direccin de memoria de un entero debo hacer lo
siguiente:
int *px;
con esto estoy declarando una variable que puede almacenar la direccin de una variable de tipo int. Podramos
entonces asignarle una direccin de memoria mediante el operador que vimos antes.
int x = 4;
int *px = &x;
Imaginemos que la variable px se crea en la posicin 2 de nuestra memoria ficticia. Nos quedara el siguiente
esquema:

Como vemos ocupa una posicin como una variable normal, pero en lugar de contener un entero como 4 contiene una
direccin de memoria (998). Como posicin de memoria que ocupa tambin tiene su direccin de memoria que se
puede obtener con el operador & es lo que se llama un puntero de puntero.
Estos se declaran igual que los dems anteponiendo el operador *:
int x = 4;
int *px = &x;
int **ppx = &px // es un puntero de puntero por lo que solo puede guardar direcciones de punteros de tipo int
Siguiendo con el ejemplo de nuestra memoria ficticia supongamos que la nueva variable ppx se crea en la posicin
997. Este sera el equema resultante.

Veamos algunos ejemplos de declaracin de punteros:


int *puntero1;
int *puntero2, *puntero3;
char variable, *punteroCaracter;
float *punteroReal, real;
En la primera lnea, declaramos un puntero a un entero. En la segunda, dos punteros a entero. En la tercera, un
carcter ( variable) y un puntero a carcter (punteroCaracter). Por ltimo,punteroReal) es un puntero a un real,
y real es declarado como un nmero real.

Veamos un ejemplo de uso del operador * y del operador de direccin (&):


#include <iostream.h> main() double d, *dp;
d = 2.7183;
*dp = &d;
cout << "numero = " << d << "\tdireccin = " << &d << '\n';
NOTA IMPORTANTE: Es importante que los punteros siempre apunten a variables del mismo
tipo. Si se mezclan los tipos, los resultados son errneos. Tambin es importante inicializar los
punteros antes de utilizarlos. Si no se inicializan, es decir, si no apuntan a algn sitio vlido,
se pueden alterar otras zonas de memoria, ya se a del propio programa o del sistema
operativo.

Los punteros se pueden comparar entre ellos y se pueden asignar direcciones de memoria. Adems, se
pueden decrementar o incrementar. El incremento o el decremento vara segn el tipo de dato al que
apunten. A los punteros tambin se les puede sumar o restar nmeros enteros. NO SE PUEDE REALIZAR
NINGUNA OTRA OPERACIN ARITMTICA CON LOS PUNTEROS.

Los punteros son usados con frecuencia en C, y tienen gran cantidad de aplicaciones:

Proporcionan una forma de devolver varios datos desde una funcin mediante
los argumentos de la funcin.

Nos permiten igualmente, que referencias a otras funciones puedan ser


especificadas como argumentos de una funcin (pasar funciones como
argumentos en una funcin determinada).

Supongamos que v una variable que representa una determinado dato, esta variable le corresponde una
direccin de memoria, esta direccin de memoria puede ser accedida mediante &v (el operador unario &
proporciona la direccin del operando v).

Es importante recordar que si asignamos &v a una variable pv, dicha variable me va a representar la
direccin de memoria de v, y no su valor. Si queremos acceder al valor que posee la direccin
de x tendremos que poner: *pv (donde * es un operador unario, llamado operador indireccin, que opera
slo sobre una variable puntero). Entonces vemos que tanto v como como *pv, representan el mismo
valor. Si ahora asignramos a una variable u el valor de *pv, entonces voy a tener u y v representando al
mismo valor.

Ejercicio Explicado En el Video Tutorial:


#include <iostream>// incluimos la librera < iostream>
#include <windows.h>// si tienes Windows como SO y utilizas CodeBlocks como IDE, es indispensable utilizar esta
librera.
using namespace std;// esto permite al programador tener acceso a todos los miembros del namespace y escribir
instrucciones ms concisas.
int main() { // inicializamos nuestra funcin
int num = 12; //Declaramos nuestra variable num como tipo Entero.
int *pNUM = 0;// Declaramos nuestro puntero de tipo entero, lo de claramos con el operador de indireccion (*)
anteponindose a la variable.
cout <<"\nEL VALOR QUE ALMACENA NUMERO: "<< num << endl; //Mostramos por pantalla el valor que almacena
nuestra variable
cout <<"\nLA DIRECCION EN MEMORIA DE NUMERO: "<< &num << endl; //Mostramos por pantalla el valor de la
direccin de nuestra variable.
pNUM = &num; // hacemos que nuestro puntero pNum apunte hacia la direccin en memoria de nuestra variable,
con esto pNum almacenara esa direccin.

cout<<"\nLO QUE ALMACENA EL PUNTERO: "<< pNUM << endl;// Mostramos por pantalla lo que almacena nuestro
puntero.
return 0;
}

Resultao del ejercicio:

También podría gustarte