Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMACION II
MONTERIA CRDOBA
UNICRDOBA
2015
1. Definicin de Puntero.
1
Un puntero es una variable cuyo contenido es una direccin de memoria. Cuando esta
direccin es la posicin de memoria de otra variable, se dice que el puntero apunta a esta
variable. Por tanto, podemos hacer la siguiente diferenciacin:
Memoria
Etiq. Direc. Contenido
P 1000 5000
... ...
... ...
V 5000 13,55
... ...
En ese caso, P es una variable de tipo puntero, ya que su contenido (5000) es una
direccin de memoria. El puntero P ocupa la direccin de memoria 1000, pero su
contenido es la direccin 5000. Esta direccin es la que ocupa la variable V, por lo que
se dice que P apunta a V. El contenido de V es realmente el dato en este caso, cuyo valor
es 13,55.
Un puntero, como una variable que es, debe ser declarada como cualquier otra variable.
En C un puntero se declara como sigue:
<tipo> *<nombre_puntero>;
Ej.
int *pi;//pi podr apuntar a variables de tipo int.
char *pc;//pc podr apuntar a variables de tipo char.
float *pf;//pf podr apuntar a variables float.
Ej.
2
int x;
int *pi = &x;
...
printf(Direccin que ocupa x: %p, pi);
printf(Direccin que ocupa x: %p, &x);
//Ambos printf visualizan lo mismo.
Debe recordarse que cada posicin de memoria almacena 1 byte, es decir que el tipo de
cada variable indicar cuntas posiciones de memoria ocupa la variable, as tenemos:
char, 1 byte; int, 2 bytes; float, 4 bytes, etc.
Ej.
int *pi; //pi es un puntero a variables de tipo int.
int x; //x es una variable de tipo int.
Ej.
int *pi;
int x = 1;
int y;
*pi = 0; //Almacena 0 en x.
3
puntero sin inicializar podemos incluso daar el sistema operativo, ya que
puede estar apuntando a cualquier direccin de memoria.
Ej.
int *pi;
int x;
pi = &x; //Apunta a x, direccin conocida.
Ej.
int *pi;
Ej.
int *ptr1, *ptr2;
int numero;
ptr1 = №
ptr2 = ptr1; //ptr2 apuntar a donde ptr1, es decir a
//la variable numero.
Ej.
int n, *p = &n; //n es int; p es puntero a n.
p++; //Suma 1 a p, por tanto p se incrementa en dos
//posiciones de memoria (int ocupa 2 bytes).
4
float f, *p = &f; //c es float; p es puntero a f.
p += 3; //Suma 3 a p, por tanto p se incrementa en 12
//posiciones de memoria: 3*4 (float = 4 bytes)
Estas operaciones se usan cuando se tienen varias variables del mismo tipo en
direcciones consecutivas de memoria, como ocurre con los arrays. Si un puntero
apunta a la primera componente del array, al sumarle una unidad apuntar a la
segunda componente, ya que se incrementa en el nmero de posiciones que ocupe
cada componente. Si se le suma 5 al puntero, apuntar a la quinta componente del
array. Igualmente ocurre con la resta, pero en el sentido inverso. En general, sumar o
restar enteros a punteros se usa para recorrer arrays, como veremos en un apartado
posterior.
Ej.
int n, m;
int *p = &n, *q = &m;
6. Punteros a funciones.
Los punteros tambin pueden usarse para que apunten a la direccin de memoria
donde comienza el cdigo de una funcin, de forma que podr realizarse una llamada a
esa funcin a travs de dicho puntero.