Está en la página 1de 6

UNMSM Facultad de Ingeniera Industrial

ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 1

PUNTEROS

Un puntero es un tipo de dato. Un variable tipo puntero es una variable cuyo contenido es la
direccin de otra variable.

MEMORIA



200

p 800
800
x 23




p es una variable tipo puntero.
x es una variable tipo int apuntada por p.

Declaracin de variables tipo puntero


tipo de dato apuntado * variable tipo puntero ;


Ejemplos:

int *p; // p es una variable tipo puntero que apunta a una
// variable tipo int.


float *q; // q es una variable tipo puntero que apunta a una
// variable tipo float.


char *r; // r es una variable tipo puntero que apunta a una
// variable tipo char.


Para hacer referencia a la variable apuntada se usa la notacin:


* variable tipo puntero


UNMSM Facultad de Ingeniera Industrial
ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 2

Ejemplo:

MEMORIA



200

p 800
800
x 23

*p


*p es otro nombre para la variable x

Variables estticas

Son aquellas que se declaran expresamente en los programas y a las que el sistema
operativo asigna una posicin de memoria antes de la ejecucin del mismo.

Variables dinmicas

Son variables que se crean y se destruyen durante la ejecucin del programa. No son
declaradas explcitamente en los programas.


Operador &

Devuelve la direccin de memoria de una variable. Su sintaxis es:

& nombre de variable

Ejemplo:

int main()
{
int x;
float y;
int *p;
float *q;
p=&x;
q=&y;
}

UNMSM Facultad de Ingeniera Industrial
ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 3
Creacin de variables dinmicas

Para crear variables dinmicas se usa el objeto new cuya sintaxis es la siguiente:


variable de tipo
puntero


=

new

tipo de dato de la
variable creada

;

Ejemplo:

int *p;
float *q;
p =new int; // crea una variable dinmica de tipo int y hace que p apunte a ella.
q =new float; // crea una variable dinmica de tipo float y hace que q apunte a ella.

NOTA
No se puede asignar un valor constante a una variable tipo puntero ni ingresar un valor por
teclado para ella.

int *p;
p =800; // ERROR
cin>>p; // ERROR

Si es posible imprimir el valor de un puntero:
cout<<p;

Ejemplo:

void main()
{
int *p, *q;
p =new int;
*p =8;
q =p;
}

Ejemplo:

int main()
{
int *p, *q;
p =new int;
q =new int;
*p =8;
*q =*p;
}
UNMSM Facultad de Ingeniera Industrial
ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 4

NOTA
No se puede asignar una variable tipo puntero a otra que no sea de su mismo tipo.

int *p, *q;
float *r;
p =new int;
*p =7;
q =p;
r =p; // ERROR
Eliminacin de variables dinmicas

delete <variable tipo puntero que apunta a la variable dinmica que ser eliminada>;

Se libera el espacio ocupado por la variable dinmica para poder ser utilizado nuevamente.
La variable tipo puntero que la apuntaba mantiene de la variable dinmica, aunque ya no
tenga significado su apuntamiento.

int main()
{
int *p;
p =new int;
*p =17;
cout<<p;
delete p;
cout<<p;
}

Constante NULL

Es una constante predefinida en C++cuyo valor es cero (0) y sirve para inicializar una
variable tipo puntero que no apunta a ninguna variable.

variable tipo puntero = NULL;

int main()
{ int *p;
p =new int;
*p =17;
cout<<p;
delete p;
cout<<p;
p =NULL;
cout<<p;
}
UNMSM Facultad de Ingeniera Industrial
ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 5

Comparacin de variables tipo puntero
Solo tienen sentido realizar comparaciones de igualdad ( ==) o desigualdad ( !=).

Ejemplo de uso de Punteros


#include <iostream >
#include <stdlib.h>

using namespace std;

int main()
{
int x, *p, *q;
x = 100;
cout<<"VARIABLE x"<<endl;
cout<<"El valor de x es "<<x<<endl;
cout<<"la direccion de x es "<<&x<<endl<<endl;
cout<<"PUNTERO p"<<endl;
cout<<"la direccion de p es "<<&p<<endl;
cout<<"el valor de p es "<<p<<endl<<endl;
cout<<"p APUNTA A x"<<endl;
p = &x;
cout<<"ahora el valor de p es "<<p<<endl;
cout<<"el valor de *p es "<<*p<<endl<<endl;
cout<<"PUNTERO q"<<endl;
cout<<"la direcion de q es "<<&q<<endl;
cout<<"valor de q es "<<q<<endl<<endl;
cout<<"ASIGNANDO NULL A q"<<endl;
q = NULL;
cout<<"ahora el valor de q es "<<q<<endl;
cout<<"CREANDO VAR. DINAMICA APUNTADA POR q"<<endl;
q = new int;
cout<<"valor de q es "<<q<<endl;
*q = *p;
cout<<"el valor de *q es "<<*q<<endl;
delete q;
system("PAUSE");
return 0;
}





UNMSM Facultad de Ingeniera Industrial
ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 6

Ejemplo de uso de Punteros


#include <iostream>
#include <stdlib.h>

using namespace std;

void intercambiar1( int x, int y );
void intercambiar2( int *x, int *y );

int main()
{
int a,b;
cout<<"Ingrese 2 numeros:";
cin>>a>>b;
intercambiar1(a,b);
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
intercambiar2( &a , &b );
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
system("PAUSE");
return 0;
}

void intercambiar1( int x, int y )
{
int aux;
aux = x;
x = y;
y = aux;
}

void intercambiar2( int *x , int *y )
{
int aux;
aux = *x;
*x = *y;
*y = aux;
}

También podría gustarte