Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
APUNTADORES O
PUNTEROS
APUNTADORES CON VECTORES Y MATRICES
Manfred Randall
PUNTEROS EN C++
INTRODUCCIN
El puntero o apuntador es una tcnica muy potente que puede utilizar en sus programas
para hacerlos ms eficientes y flexibles. Los punteros son una de las razones
fundamentales para que el lenguaje C/C++ sea tan potente y tan utilizado.
Una variable puntera (o puntero, como se llama normalmente) es una variable que
contiene direcciones de otras variables. Todas las variables vistas hasta este momento
contienen valores de datos, por el contrario, las variables punteras contienen valores
que son direcciones de memoria donde se almacenan datos. En resumen, un puntero es
una variable que contiene una direccin de memoria, y utilizando punteros su programa
puede realizar muchas tareas que no sera posible utilizando tipos de datos estndar.
Definiciones
NOTA: Existe una direccin especial que se representa por medio de la constante NULL
(definida en <stdlib.h>) y se emplea cuando queremos indicar que un puntero no apunta
a ninguna direccin.
Declaracin de un puntero
Ejemplo:
int x=15, * p1=NULL, * p2=NULL;
p1 = & x; // Se le asigna la direccin de memoria de x
p2 = p1; // Se le asigna el valor de p1
Los dos apuntan a la misma variable
Inicializacin de Punteros
Todo puntero debe inicializarse, ya que en caso contrario tras ser declarado
apuntara a cualquier sitio (peligroso) . Al usarlo puede p.ej. modificar una
parte de la memoria reservada a otra variable .Si an no sabemos dnde debe
apuntar, se le asignar el valor null(nulo) ,es decir no apunta a ningn sitio en
especial.
5.2. Declaracion :
Cuando declaramos un vector
<tipo> <identificador> [<dim>]
En realidad:
1. Reservamos memoria para almacenar <dim> elementos de tipo <tipo>.
2. Creamos un puntero <identificador> que apunta a la primera posicin de la
memoria reservada para almacenar los componentes del vector.
Por tanto, el identificador del vector es un puntero.
int v[3];
int *ptr;
ptr = v; // Equivale a ptr = &v[0]
v[0] = 6; // *v = 6; *(&v[0]) = 6;
NOTA: La suma de punteros no tiene sentido y no est permitida. La resta slo
tiene sentido cuando ambos apuntan al mismo vector y nos da la distancia
entre las posiciones del vector (en nmero de elementos).
Ejemplo: Distintas formas de sumar los elementos de un vector
int suma ( int v[], int N)
{ /* Alternativa 3 */
int i, suma; suma = 0;
/* Alternativa 2 */
int *ptr, *ptrfin; ptrfin = ptr + N-1;
suma = 0;
/* Alternativa 1 */ for (ptr=v ; ptr<=ptrfin ; ptr++)
for (i=0 ; i<N ; i++)
suma = 0; suma = suma + *ptr;
suma = suma + (*(v+i));
for (i=0 ; i<N ; i++) return suma;
suma = suma + v[i]; }
Apuntador a matrices:
Caso particular, las expresiones m[0], m[1] y m[2] sobre la matriz de nuestro
ejemplo producen las direcciones donde comienzan las filas primera,
segunda y tercera respectivamente. Es decir:
Declaracin:
<tipo> mat [<dimF>][<dimC>];
Errores Comunes
Tablas y cadenas.
Parmetros por referencia.
Biblioteca de funciones ( scanf ).
Coger la memoria que necesitamos.
Conclusiones: