Vous êtes sur la page 1sur 25

INTEGRANTES:

• ERIK OMAR RAMIREZ ALMENDAREZ


• JOSE GERARDO TOVAR VAZQUEZ
• FRANCISCO IVAN BLANCO ONTIVEROS
Definición:
Son una variable que hace referencia (apunta) a una
región de memoria. Al trabajar con punteros se manipulan
directamente las direcciones de memorias en las cuales
están los datos.
Son variables pero en vez de contener un valor
especifico, contienen las direcciones de las variables a las
que apuntan.
Sintaxis
Operadores

Existen dos operadores a tener en cuenta cuando trabajamos con punteros. El operador de
dirección (&) que devuelve la dirección de memoria de su operando y el operador de indirección
(*) que devuelve un alias para el objeto al cual apunta el operando del puntero.
En el siguiente ejemplo vemos como se inicializa una variable X con el valor 15. Luego se crea
un puntero a int y por último el puntero pasa a apuntar a la variable X. Esto es, ptrX es un
puntero a X.

Ejemplo:

Int X=15;
int *ptrX;
ptrX = &X;
Punteros y vectores (arrays)
Los vectores son punteros constantes. Un vector sin subindice es un puntero al primer
elemento del vector. Una matriz es un vector de vectores. (Ej: int M[3][3];) de manera
que en cada elemento del primer vector "se cuelga" otro vector, pudiendo hacer así
referencia a filas y columnas.

int X[15];
int *ptrX;
ptrX = X; // ptrX recibe la dirección del primer elemento ( 0 ) de X

Así como también puede escribirse

int X[15];
int *ptrX;
ptrX = &X[0]; // ptrX es igual a la dirección del primer elemento de X
Matrices de punteros

Para realizar una estructura de datos dinámica, se puede


utilizar una matriz donde sus elementos sean punteros.
Suponiendo que queramos hacer un calendario y lo
dividamos por semanas. Podríamos utilizar una matriz con los
días de la semana.
Ejemplo:
const char *dias[7] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado" }
CARACTERÍSTICAS
• Los punteros permiten simular el paso por referencia, crear y
manipular estructuras dinámicas de datos, tales como listas
enlazadas, pilas, colas y árboles. Generalmente las variables
contienen valores específicos.
• Los punteros son variables pero en vez de contener un valor
especifico, contienen las direcciones de las variables a las que
apuntan. Para obtener o modificar el valor de la variable a la que
apuntan se utiliza el operador de indirección. Los punteros, al ser
variables deben ser declaradas como punteros antes de ser utilizadas.
Ejemplos de declaraciones de tipos de puntero:

Ejemplo Descripción

int* p p es un puntero a un entero.

int** p p es un puntero a un puntero a un entero.

int*[] p p es una matriz unidimensional de punteros a enteros.

char* p p es un puntero a un valor char.

void* p p es un puntero a un tipo desconocido.


Detalles al crear y usar punteros en C++
• El tipo de dato del apuntador debe coincidir con el de la variable cuya
posición en memoria apuntan. En el ejemplo vemos que tanto variable como
apuntador son enteros.
• Siempre que queremos usar el apuntador debemos anteponer el asterisco
(*) para indicar que usaremos el valor en la posición de memoria apuntada.
• De no usar el asterisco el comportamiento sería impredecible. Estaremos
haciendo uso de la dirección de memoria más no del valor almacenado en
ésta.
• Después de usar un puntero, especialmente si trabajamos con arreglos o
matrices, es muy recomendable liberar la memoria utilizada con la función
delete (tal como en el ejemplo)
• Un puntero o apuntador puede ser de cualquier tipo de dato, inclusive los
podemos usar con tipos complejos.
Ventajas
• Ofrecen potencia y la flexibilidad en C.
• Se pueden tener apuntadores a cualquier tipo de variable.
• También son útiles para pasarle parámetros a las funciones de tal modo que les
permiten modificar y regresar valores a la rutina que las llama.
· Es la única forma de expresar algunos cálculos.
· Se genera código compacto y eficiente.
· Es una herramienta muy poderosa
• Declarar e inicializar apuntadores es bastante fácil.
• Existe una relación estrecha entre los punteros y los arreglos. En C, un nombre
de un arreglo es un índice a la dirección de comienzo del arreglo. En esencia, el
nombre de un arreglo es un puntero al arreglo.
• Mientras un programa está corriendo todas las variables se guardan en
memoria, cada una tiene su dirección o localidad única.
Desventajas
• No es posible en otros lenguajes.

• Un apuntador a cualquier tipo de variables es una dirección en memoria -- la


cual es una dirección entera, pero un apuntador NO es un entero.

• El manejo complicado del almacenamiento.

• Alta sobrecarga por el movimiento de líneas.

• No asignar un apuntador a una dirección de memoria antes de usarlo .

• La memoria dinámica es que es más difícil de manejar. La memoria estática


tiene una duración fija, que se reserva y libera de forma automática. En
contraste, la memoria dinámica se reserva de forma explícita y continúa
existiendo hasta que sea liberada, generalmente por parte del programador.
Ejemplo de puntero que no apunta al tipo correcto:
• Los apuntadores son usados principalmente en la creación de
arboles, grafos y otras estructuras de datos como métodos de
búsqueda y para la asignación de memoria dinámica.
A continuación un ejemplo en C++ donde una función opera 2
punteros y modifica su valor original por su cuadrado, para su posterior
uso.
Asignación de punteros.
Respecto a la comparación y a la asignación, los punteros se ajustan a las
mismas reglas que cualquier otra variable en C:
• Un puntero puede utilizarse a la derecha de una declaración de asignación
para asignar su valor a otro puntero.
• Podemos comparar dos punteros en una expresión relacional.
Más aplicaciones:
• Los punteros en C++ sirven para señalar objetos, y también para
manipularlos.
• Pueden proporcionar una forma rápida de acceder o referenciar a tipos de
dados compuestos como arrays, estructuras y enumeraciones.
• Sirven para pasar variables por referencia a las funciones.
• Según los casos pueden optimizar el código y ahorrar recursos de memoria.
• Permiten pasar argumentos (o parámetros) a una función y modificarlos.
También permiten el manejo de cadenas y de arrays.
• Otro uso importante es que nos permiten acceder directamente a la pantalla,
al teclado y a todos los componentes del ordenador. Si sólo sirvieran para
almacenar direcciones de memoria no serían de mucha utilidad. Nos deben
dejar también la posibilidad de acceder al contenido de esas posiciones de
memoria. Para ello se usa el operador * (operador de indirección), que no
hay que confundir con el de la multiplicación.
#include <stdio.h>
Ejemplo:
main()
{
int numero;
int *punt;

numero = 43;
punt = &numero;

printf( "Dirección de numero = %p, valor de numero = %i\n",


punt, *punt );
}
EJEMPLOS

Nota: Las soluciones de los ejemplos y de los ejercicios están en el


documento Word porque ocupan demasiado espacio en la diapositiva. 
1)El programa llamado pares Impares crea un array de 100 números aleatorios del 1 al
1000. Muestra el contenido y después organizar de forma que estén juntos los
elementos pares y los impares.
2) El programa contiene una función llamada copiarArray, recibe dos arrays y el
tamaño de los mismos (son del mismo tamaño) y consigue copia en el segundo array
el contenido del primero.
3) El programa crea una función que intercambia el contenido de dos variables. Para
ello se pasarán como parámetros las direcciones de las variables.
EJERCICIOS PROPUESTOS
1) Crear un programa llamado vendedores que cree un array de 18 X 10 indicando que
poseemos una empresa de 18 vendedores cada uno de los cuales vende 10
productos.
El array almacena los ingresos obtenidos por cada vendedor en cada producto, de
modo que un menú permite almacenar los ingresos, revisar el total de cada vendedor y
obtener los ingresos totales.
2) Crear un programa que mediante un menú admita reservar o cancelar asientos de
un avión, así como mostrar qué asientos están ocupados y libreas actualmente.
El array tendrá 25 filas y 4 columnas.
3) Crear un programa que cree un array con 1000 letras mayúsculas aleatorias y que
cuenta cuántas veces aparece cada letra en el array.
BIBLIOGRAFÍA
• http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro4/413_aplicaciones
_de_los_apuntadores.html
• http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/lengua_C/punt
eros.htm
• http://www.uhu.es/04004/material/Transparencias6.pdf
• http://jorgesanchez.net/programacion/ejerciciosc/arrays.html
• http://programacion-ansi-c.blogspot.mx/2011/10/ejercicio-3-de-
punteros.html

Vous aimerez peut-être aussi