[tipexperto titulo = “Nota” ] Si nunca has programado en C o C++, te recomiendo primero aprender a programar en el lenguaje, ya que es necesario conocerlo un poco para entender el tema de los punteros.[/tipexperto]

Como se que a la mayoría de nosotros, los programadores (o los que intentamos serlo), nos gusta aprender algo viendo código directamente, mil veces me han explicado algo, pero no lo entiendo hasta ver el código. Asi que trataré de explicar de esa manera para que quede clarísimo el tema. Vamos al grano.

Entendiendo los punteros

Un puntero es básicamente una dirección de memoria. Muchas veces hemos hecho esto:

int numero;
numero = 10;
printf(“Numero: %i”,numero);

Obteniendo la salida: “Numero: 10”.

Pero, ¿Qué hace el computador en su interior? El computador trabaja con direcciones de memoria, imaginemos los siguientes valores:

Tenemos nuestra variable numero, cuyo valor es 10, y su dirección de memoria es 100. Cuando escribimos la línea “numero = 10; “, le estamos diciendo al computador que en la dirección 100 escriba el valor 10.

Ahora es cuando veremos un puntero, he aquí un código equivalente al anterior:

int numero;
int * puntero = №
*puntero = 10;
printf(“Numero: %i”,numero);

Nuevamente la salida es: “Numero: 10”.

¿Qué hicimos aquí? Vayamos línea por línea para que quede claro:

  • int numero: Declaramos nuevamente la variable numero.
  • int * puntero = &numero: Declaramos un puntero llamado puntero al cual le asignamos la dirección de memoria de numero (el operador & nos sirve para obtener la dirección de memoria de una variable, en este caso, 100).
  • *puntero = 10: Con esto estamos diciéndole al computador: “A lo que esta señalando el puntero (la dirección 100), asignale el valor 10”.
  • printf(“Numero: %i”,numero): Mostramos el valor de numero.

Para que quede más claro, veamos los valores que corresponden a nuestras variables hasta la segunda línea:

[tipexperto titulo = “Nota”]

  1. Para ver el contenido de un puntero, podemos escribir “printf(“%p”,puntero);”
  2. Los valores de las direcciones de memoria han sido cambiados para mayor comprensión, por ejemplo, la dirección de “numero” en mi computador dio “0022FF18”.

[/tipexperto]

Como vemos, la variable puntero es una variable más, tiene su dirección de memoria (110) y un valor. Lo que hace especial a los punteros, es que alojan una dirección de memoria, en este caso 100, que corresponde a la dirección de memoria de la variable numero (que contiene basura debido a que no la hemos inicializado). Entonces cuando escribimos “*puntero = 10”, decimos: En la dirección 100, escribe el valor 10. Quedando de esta manera:

Operadores &, “*” y la función Scanf

Para que quede más claro, les dejo los casos de uso de los operadores “&” y “*”:

Operador &

Se utiliza para obtener la dirección de memoria de una variable. Se puede implementar con cualquier tipo de variable.

Operador “*”

Se utiliza sólo con punteros. Su función es la de acceder al contenido de la dirección almacenada.

Quiero recalcar que siempre que trabajen con punteros, deben apuntarlo a alguna variable. De lo contrario apuntará a una dirección cualquiera y puede (y es lo mas probable) que te cause errores, además de que tu programa no funcionará como debería.

Función Scanf()

Ahora que saben el uso del operador “&”, quizás entiendan el uso de la típica función scanf, veamos un ejemplo de como se utiliza para leer una variable de tipo entero y guardar el valor en la variable:

scanf("%i",&variable);

Pueden notar el uso del operador “&” antes de “variable”. Así es, scanf recibe un puntero del tipo que se le indica en el primer argumento (“%i indica un entero, por lo tanto, el segundo argumento debe ser de tipo puntero a entero).

En éste primer artículo aprendimos sobre los punteros y sus operadores. En una próxima entrega veremos casos de uso: Punteros para pasar argumentos por referencia a funciones, Arreglos y Matrices con punteros.