Punteros
¿Qué son los punteros?
Un puntero es una variable que almacena la dirección de memoria de un objeto. Los punteros se usan ampliamente en C y C++ para tres propósitos principales: para asignar nuevos objetos en el montón, para pasar funciones a otras funciones.
Operadores
El ampersand (&): este operador nos permite obtener la dirección de memoria de una variable cualquiera y es justo esto (la dirección en memoria) lo que utilizan los punteros para referenciar valores.
El asterisco (*): su utilidad radica en que, si el valor de dicho apuntador corresponde a una dirección de memoria, el asterisco nos permite resolverla y acceder al valor almacenado allí. Dicho de otra manera, un apuntador es únicamente una dirección de memoria (un número) y el asterisco es el que hace la magia de obtener el valor referenciado por dicha dirección.
Declaración de punteros
Nota:
es aconsejable iniciar los punteros con NULL.
<tipo>
*<identificador>
<tipo>
Tipo de dato del objeto referenciado por el puntero.
<identificador>
Identificador de la variable de tipo puntero.
Operaciones con punteros
Dirección
Operador &
&
El operador & se utiliza para asignar
valores a datos de tipo puntero:
int *ptr;
...
ptr = &i;
Indirección
Operador *
*
El operador * se usa para acceder a los objetos
a los que apunta un puntero:
char *ptr;
…
ptr = &c;
*ptr = ‘A’; // Equivale a escribir: c = ‘A’
Asignación
Operador =
A un puntero se le puede asignar una dirección
de memoria concreta, la dirección de una variable o el contenido de otro
puntero.
Una dirección de memoria concreta:
...
ptr = 0x1F3CE00A;
...
ptr = NULL;
La dirección de una variable del tipo al que apunta el puntero:
char *ptr;
...
ptr = &c;
char c;
char *ptr1;
char *ptr2;
…
ptr1 = &c;
ptr2 = ptr1;
Ejemplo:
Usualmente al enviar un parámetro a una función todo lo que se haga con dicho parámetro allí adentro no tiene efecto por fuera. Por ejemplo si a una función la se le envía una variable cuyo valor es diez y al interior de la función le sumamos un cinco, después de la ejecución de la función el valor de la variable seguirá siendo diez en vez de quince. Lo que pasó al interior de la función se quedó allí. Para solucionar esto, si queremos que el valor cambie definitivamente, usamos punteros para pasar no el valor del parámetro sino una referencia a éste:
#include "stdio.h"
int funcion(int valor)
{
valor = valor + 10; //Se le suma 10
return valor;
}
{
*valor = *valor + 10; //Se le suma 10 a la posición en memoria
return *valor;
}
{
int numero = 10;
funcion(numero); //Se pasa por valor
cout << "Despues de funcion " << numero << "\n"; //10
cout << "Antes de funcionPunteros " << numero << "\n"; //10
funcionPunteros(&numero); //Se envía la dirección de memoria y la función resuelve la referencia
return 0;
}
Videos explicativos
Comentarios
Publicar un comentario