Punteros en C/C++

Los punteros son un tipo de dato especial, el cual guarda una direccion de memoria. Podemos usar un puntero para modificar un dato utilizando su dirección de memoria.

Los punteros deben apuntar a cierto tipo de dato (por ejemplo a int o a char, etc.). Por ejemplo, para guardar la dirección de memoria de una variable entera llamada “numero” (int), declaramos el puntero de la manera que sigue:

La declaración de un puntero es así:


int numero;
int * puntero;

puntero = №

Primero que todo, notamos que la variable “puntero” se antepone de un asterisco, el asterisco (*) se utiliza para decirle al compilador que estamos declarando un puntero.

Luego notamos la asignacion “puntero = №”. El operador “&” utilizado a la izquierda de una variable, nos da la dirección de memoria de dicha variable. Entonces lo que estamos haciendo en esa asignacion es: “Obtenemos la dirección de memoria de ‘numero’ y se la asignamos al puntero ‘puntero’ “.

Entonces ahora la variable “puntero” guarda la dirección de memoria de la variable “numero”.

Normalmente, si queremos modificar el valor de la variable “numero”, hacemos lo siguiente:


numero = 5;

Podemos realizar esa misma asignacion utilizando punteros con el siguiente codigo:


*puntero = 5;

El operador “*” utilizado a la izquierda de un puntero, lo que hace es decirle al compilador: “A lo que este apuntando el puntero ‘puntero’, asignale el valor 5”.

Ahora te preguntaras, ¿Para que sirven los punteros?

Pues nos sirve para pasar datos que queremos trabajar directamente a una función, por ejemplo:

Supongamos que queremos calcular el cuadrado de dos numeros y guardar esos valores en las variables directamente, tenemos el siguiente programa:

</pre>
#include<iostream>
using namespace std;

void Cuadrado(int num1, int num2)
{
     num1 = num1*num1;
     num2 = num2*num2;
}
int main()
{
     int numero1 = 5, numero2 = 10;
     Cuadrado(numero1, numero2);
cout << "Numero1: " << numero1 << "\nNumero2: " << numero2 << endl;
}
<pre>

La salida de este programa es:

Esta función lo que hace es tomar el valor de numero1 y numero2 y copiarlos a  variables locales de la función llamadas num1 y num2, por lo tanto, si modificamos estos valores, no sucedera nada con los valores de numero1 y numero2, ya que no estamos trabajando con ellos, si no que con sus copias. Para modificar los valores de numero1 y numero2 directamente, utilizamos punteros de la siguiente manera:

</pre>
#include<iostream>
using namespace std;
void Cuadrado(int * num1, int * num2)
{
 *num1 = (*num1) * (*num1);
 *num2 = (*num2) * (*num2);
}
int main()
{
 int numero1 = 5, numero2 = 10;
 Cuadrado(&numero1, &numero2);
 cout << "Numero1: " << numero1 << "\nNumero2: " << numero2 << endl;
}
<pre>

La salida de este programa es la siguiente:

Notarás que agregamos “*” en la declaración de la función, esto significa que los parámetros que le entregaremos a la función serán de tipo puntero, los cuales apuntan a un entero (int). Al utilizar (*num1), estamos trabajando con el valor de lo que esta apuntando num1, supongamos que la dirección de lo que apunta num1 es “120”, y el valor al que apunta es “5”, veamos si lo entiendes con lo siguiente:

[Modificamos lo que contiene la dirección 120] = 5*5;
Notarás, además, que en la llamada a la función escribimos:

Cuadrado(&numero1, &numero2);

Utilizamos el operador “&” para pasarle a la función la dirección de memoria de numero1 y numero2 respectivamente, debido a que la funcion lo que espera es un puntero a un entero.
Resumen:
-Para acceder a la dirección de memoria de una variable utilizamos “&”.
-Para acceder al contenido de un puntero, utilizamos “*”.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s