You are on page 1of 36

PUNTEROS

Ing Anghello Quintero


PUNTEROS(APUNTADORES)

Una variable puntero es una variable que
contiene direcciones de otras variables.

Las variables vistas hasta este momento
contienen valores de datos

Las variables punteros contienen valores que
son direcciones de memoria donde se
almacenan datos

Un puntero es una variable que contiene una
direccion de memoria

Cada vez que se declara una variable en C+
+, el compilador establece un area de
memoria para almacenar el contenido de esa
variable

Cuando se declara una variable (int), por
ejemplo el compilador asigna dos bytes de
memoria

El espacio para esa variable se situa en una
posicion especifica de la memoria llamada
Direccion de memoria

El concepto de punteros tiene
correspondencia en la vida diaria.

Cuando se envia una carta por correo, su
informacion se entrega basada en un
puntero que es la direccion de esa carta
REGLAS BASICAS DE
PUNTEROS

Un puntero es una variable como cualquier
otra

Una variable puntero contiene una direccion
que apunta a otra posicion de memoria

En esa posicion se almacenan los datos a
los que apunta el puntero

Un puntero apunta una variable de memoria
DECLARACION DE PUNTEROS

Al igual que cualquier variable, las variables
punteros se declaran antes de ser utilizadas.
La declaracion de una variable puntero debe
indicar al compilador el tipo de dato al que
apunta el puntero; para ello se hace
preceder su nombre con un asterisco(*)
tipo de apuntador * identificador de puntero
int *ptr; //puntero a un tipo de dato entero
long *ptr2; //puntero a un tipo de dato largo
char *ptr3; // puntero a un tipo de dato char
float *f;//puntero a un tipo de dato float

Siempre que aparezca un asterisco (*) en una


definicion de una variable, ésta es una
variable puntero
INICIALIZACION DE PUNTEROS

La inicializacion de un puntero proporciona a
ese puntero la direccion del dato
correspondiente. Despues de esta
inicializacion se puede utilizar este puntero
para referenciar los datos direccionados

Para asignar una direccion de memoria a un
puntero se utiliza el operador de referencia &

Asi por ejemplo: &valor
INICIALIZACION DE PUNTEROS

Lo anterior significa “la direccion de valor”, este
metodo se conoce como inicializacion estatica.
Esta asignacion requiere:
– Asignar memoria estaticamente definiendo una
variable y a continuacion hacer que el puntero
apunte al valor de la variable
int i; //declara una variable i, se asigna una direccion fija y no
puede desaparecer
int *p;//declara un puntero o variable puntero a un entero p
p=&i; //asigna la direccion de i a p
INICIALIZACION DE PUNTEROS
– Asignar un valor a la direccion de memoria
int *p;
*p=50;
NOTA: la asignacion p=50 es erronea
El operador & devuelve la direccion de memoria
El operador * devuelve el contenido de la memoria apuntada por el puntero
ASIGNACION DE MEMORIA A UN PUNTERO

P contiene el valor de 100 que


1001
es la direccion de i

char *p 1000 100


999 *p es la direccion de
del elemento al que
P=&i
apunta p. Por
consiguiente, *p
101 contiene el valor de
‘A’
char i 100 A
99

cout<<“\n la direccion de i”<<p; // muestra 100 (hexa)


cout<<“\n el contenido de i”<<*p; // muestra ‘A’
ejemplo
ejemplo
TALLER

De acuerdo a lo visto sobre punteros,
elabore un programa donde se implemente
el tema de punteros. No utilice funciones

Utilizando funciones, elabore un programa
con punteros
TALLER


Redacte un ejemplo de la vida diaria donde
podamos aplicar o ver la similitud con
punteros
//apuntador a caracter
#include<iostream.h>
main()
{
char c;
char *p;
p=&c;
for(c='a';c<='z';c++)
{cout<<*p;
}
return 0;
}

Ejercicio
Elaborar un programa que convierta cada letra
del ejercicio anterior en su respectivo codigo
ASCII. Ejemplo la a es el 97 , la b es el 98 y
asi sucesivamente
a = 97
b = 98
c= 99
.....z=122
TIPOS DE DATOS ENUMERADOS
Hay diferentes tipos de datos:
Numericos(Entero, real, doble)
Carácter(Char)
Cadena(char nombre[30])

Pero existe un tipo de datos especial, estos


son los tipos de datos enumerados
Un tipo de datos enumerado o enumeracion
esta constituido por una serie de constantes
simbolicas enteras.
Se declara una enumeracion con la palabra
reservada enum y una serie de
enumeradores delimitados por caracteres
llaves (elementos de un tipo enumerado) y
separados por coma
Por defecto, el primer enumerador tiene un
valor de cero.
A cada enumerador se le atribuye un valor
incrementando un valor constante en
relacion a su predecesor
Ejemplo
enum {false, true};//false ==0, true==1
cout<<“\n falso es igual a ”<<false;
Otra forma de declarar un tipo de dato
enumerado es:
enum dias{lunes,martes,miercoles,...,domingo};
cout<<“\nLunes es el dia”<<lunes;
Se puede tambien asignar explicitamente un
valor a un enumerador
enum dias{lunes=1,martes,miercoles,...domingo};
cout<<“\nLunes es el dia”<<lunes;
#include<iostream.h>
class dias
{
enum dia{lunes=1,martes,miercoles};
public:
void mostrar()
{
cout<<"\n martes es igual a "<<martes;
}
}dia;
main()
{dia.mostrar();return 0;}
Lo anterior significa que un valor enumerado se puede
utilizar en lugar de int.
OPERACIONES ARITMETICAS CON DATOS
ENUMERADOS
#include<iostream.h>//enum3.cpp
main()
{
enum carro{mazda=32767,renault=-32768};//maximo valor
que puede tomar una constante numerada
float precio;
cout<<"\nmazda "<<mazda*1000000;//se pueden realizar
operaciones aritmeticas, pero da un error por que el
resultado seria una constante demasiado grande
return 0;}
#include<iostream.h>//enum4.cpp
main()
{
enum carro{mazda=32767,renault=-32768};//maximo
valor que puede tomar una constante numerada
float precio;
precio=((float)mazda)*1000;//se debe convertir a
flotante
cout<<"\nmazda "<<precio;

return 0;
}
Cada enumerador puede tener diferentes valores
diferentes
#include<iostream.h>//enum5.cpp
main()
{
enum mes{enero=31,febrero=28,marzo=31};//cada
enumerador puede tener un valor diferente
cout<<"\nEnero tiene "<<enero<<" dias";
cout<<"\nFebrero tiene "<<febrero<<" dias";
cout<<"\nMarzo tiene "<<marzo<<" dias";

return 0;
}
FUNCION CIN.GETLINE
La funcion cin.getline es una funcion interna
de C++ utilizada para capturar cadenas de
caracteres que tengan espacios en blanco.
Esta funcion permite la lectura de cadenas
completas incluyendo espacios en blanco.
Si se va a leer una cadena ha de ser mayor
que la cadena real al menos en dos
caracteres, para permitir el carácter ‘\n’ y el
carácter ‘\0’. El primer carácter indica la tecla
enter y el segundo es el carácter nulo de
toda cadena de caracteres
Espacio reconocido por cin.getline Carácter nulo
enter introducido por
cin.getline

C O M P A Q I B M ‘\n’ ‘\0’

Espacio no reconocido por cin


TALLER
1. Elaborar un programa que convierta cada
letra del ejercicio anterior en su respectivo
codigo ASCII. Ejemplo la a es el 97 , la b es
el 98 y asi sucesivamente
a = 97
b = 98
c= 99
.....z=122
TALLER
2. Elaborar un programa que convierta cada
letra del alfabeto dado en minuscula en su
respectiva mayuscula.
a=A
b=B
c= C
.....z=Z
TALLER
3. Elaborar un programa a traves de punteros
que muestre la tabla ASCII
Valor Decimal Carácter
.
33 !