Sei sulla pagina 1di 10

[Capte la atencin del lector con un

resumen atractivo. Este resumen es una


breve descripcin del documento. Cuando
est listo para agregar contenido, haga clic
aqu y empiece a escribir.]

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

Un puntero es una variable capaz de almacenar direcciones de memoria y


mediante los operadores adecuados acceder a la informacin que contiene la
direccin de memoria a la que apunta en cada momento.

Es una variable o dato que contiene una direccin de memoria.

Son los ms verstiles y los que mayor potencia proporcionan.


.
Porque es importante conocer la direccion de memoria
de una variable ?

Permite que las funciones cambien el valor de sus argumentos.

Permite pasar vectores de forma eficiente entre funciones: en lugar de copiar


cada elemento del vector, se copia la direccin del primer elemento.

Permite reservar memoria en tiempo de ejecucin en lugar de en tiempo de


compilacin, lo que significa que el tamao de un vector puede ser determinado
por el usuario en lugar de por el programador.
Permite el paso de argumentos por referencia, la construccin de estructuras
dinmicas de datos y la mejora en la velocidad de ejecucin de algunos
algoritmos.

Los operadores punteros

Existen dos operadores especiales de punteros: * y &.


El operador & (operador direccin), aplicado sobre el nombre de
una variable, devuelve su direccin de memoria.

El operador * (operador indireccin) aplicado sobre una variable de


tipo puntero permite acceder al dato al que apunta, es decir, al
valor de la variable situada en esa direccin de memoria.

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

<tipo de dato retornado> *<identificador de puntero>

Algunos ejemplos de variables punteros:


int *numero; //puntero a una variable de tipo entero.
char *carcter; //puntero a una variable de tipo carcter.
float *dato; //puntero a una variable de tipo flotante.
long *n; //puntero a una variable de tipo entero largo.

NOTA: Cuando se declara un puntero se reserva memoria para albergar una


direccin de memoria, pero no para almacenar el dato al que apunta el puntero.
Asignacion de punteros
Respecto a la comparacin y a la asignacin, los punteros se ajustan a las
mismas reglas que cualquier otra variable en C:

Un puntero puede utilizarse a la derecha de una declaracin de asignacin para


asignar su valor a otro puntero.
Podemos comparar dos punteros en una expresin relacional.

A un puntero se le puede asignar:

El valor de otro puntero, del mismo tipo.


La direccin de memoria de una variable cuyo tipo coincidaen el tipo_base
del 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.

ejemplo: int *p = null;


Las variables tipo puntero deben apuntar al tipo de dato correcto. Si no es as,
pueden producirse resultados inesperados. Por ejemplo:

Apuntadores con Vectores y Matrices

Apuntador con vector :


Para C, un vector es un puntero que apunta a una zona de memoria reservada
en tiempo de compilacin.
El nombre de un vector es un puntero al inicio del mismo y Cuando C analiza
una expresin del tipo
vector[indice]
realmente la convierte a otra de tipo
*(vector+indice)

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:

Una matriz es un puntero constante a la primera de un conjunto deposiciones


de memoria consecutivas que guardan datos del mismo tipo.
En cuanto a las matrices, C las almacena en memoria disponiendo sus
elementos por filas de forma consecutiva. As, los elementos de una matriz
de 3x4 estaran as:

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:

int m[3][4], *fila, f, c;


for(f=0; f<3; f++) {
fila= m[f];
for(c= 0; c<4; c++)
printf("%d\n", fila[c]);
}

Una forma bastante comn de acceder a un elemento de una matriz


bidimensional de FxC a partir de la posicin de inicio de la matriz es mediante
la frmula siguiente:

elemento(fila, columna)= *(puntero+(fila*C)+columna)

Nota :Esto nos permitir, como veremos ms tarde, pasar matrices de


cualquier tamao a una funcin.

Declaracin:
<tipo> mat [<dimF>][<dimC>];

direccin(i,j) = direccin(0,0) + i*dimC + j


RECOMENDACIONES

Peligros / Errores Tpicos Con Punteros

Olvidarnos de reservar memoria.


Olvidarnos de devolver memoria.
Apuntar a dnde no es.

Errores Comunes

Asignar punteros de distinto tipo


int a = 10;
int *ptri = NULL;
double x = 5.0;
double *ptrf = NULL;
ptri = &a;
ptrf = &x;
ptrf = ptri; // ERROR
Utilizar punteros no inicializados
char *ptr;
*ptr = a; // ERROR
Asignar valores a un puntero y no a la variable a la que apunta
int n;
int *ptr = &n;
ptr = 9; // ERROR
Intentar asignarle un valor al dato apuntado por un puntero cuando ste es
NULL
int *ptr = NULL;
*ptr = 9; // ERROR
IMPORTANCIA DE LOS PUNTEROS

Tablas y cadenas.
Parmetros por referencia.
Biblioteca de funciones ( scanf ).
Coger la memoria que necesitamos.

Conclusiones:

En punteros en matrices Siempre que se llama a malloc hay que llamar


a4. free(p );.
Para declarar un puntero se situa un arterisco entre el tipo de dato y el
nombre de la variable ,como INT *p.
Para obtener la direccion de una variable existente ,se utiliza el operador
(s).
Para obtener el valor almacenado en la direccion utilizada por el puntero
se utiliza el operador de indireccion (*).
Referencias Bibliograficas

Luis .(20\11\2017) punteros.www.detodoprogramacion.com.


Edu.uy.(09\08\2005)punterosc++.https://www.fing.edu.uy/inco/cursos/prog
3/utils/Punteros.pdf
Uhu.material.(23\03\2007)punteros.www.uhu.es/04004/material/Transpare
ncias6.pd
berzal.(12\12\2005).punteroselvex.ugr.es/decsai/c/apuntes/punteros.pdf
utm.mx(12\2008)Apuntadores..punteros.www.utm.mx/~mgarcia/PE7(Apu
ntadores).pdf

Potrebbero piacerti anche