Guía para programar juegos #10-2

Bueno, después de una primera aproximación a lo que es la memoria del ordenador y de cómo se organizan las variables y programas en ella comenzamos con lo que son en sí mismos los punteros. Es algo complicado pero espero que con paciencia y práctica lo entendáis.

Un puntero es un tipo de variable, pero no uno cualquiera. Los valores que almacenan los punteros son direcciones de memoria de un tipo de variable. Es decir, habrá punteros de enteros, punteros de caracteres etc.

Veamos cómo se declaran los punteros y como se le asignan direcciones de memoria con un ejemplo muy simple.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int numero;

int *punt;

numero = 43;

punt = &numero;

printf( «Dirección de numero = %p, valor de numero = %in», &numero, numero );

system(“pause”);

return 0;

}

int *punt; Significa que creamos una variable tipo puntero que almacenará la dirección de un entero.

punt = &numero; Significa que en punt almacenamos la dirección de la variable numero.

Ahora diremos que punt apunta a numero, es decir, contiene la dirección de la variable número.

Los punteros tienen muchas utilidades, son complicados de usar pero pueden comvertirse en buenos compañeros. Sirven para cambiar el valor de los parámetros que se pasan a las funciones. Por ejemplo si usais la función suma que recibe dos parámetros a y b y hace:

a = a + b;

return a;

La variable a no se modifica fuera de la función ya que al pasar los parámetros a y b lo que se les hace es una copia de manera que el original sigue intacto.

Con los punteros podemos acceder a la dirección de memoria donde están contenidas las variables, de esta manera podemos modificarlas. Veamos un ejemplo.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int numero;

int *punt;

numero = 43;

punt = &numero;

printf(“numero = %d”, numero);

*punt = 25;

printf(“numero = %d”, numero);

system(“pause”);

return 0;

}

Como veis, accedemos al contenido de la dirección de memoria almacenada por punt usando el operador *. Así si hacemos *punt = 45, cambiamos el valor de la variable numero por 45 ya que accedemos a la casilla de memoria donde numero está almacenado.

Es algo complicado pero ya iréis dominándolo poco a poco.

Los punteros son variables y como tales se pueden comparar, sumar etc. Lo normal no es tocarlas mucho en este sentido, ya que pueden provocar resultados inesperados y bloquear el programa. Hay que saber usarlos bien.

En el siguiente número veremos punteros aplicados a las funciones. Deberíais hacer variantes de los programas expuestos para comprender el concepto de puntero y dominarlo antes de seguir con lo siguientes tutoriales.

Números anteriores de “Programación de videojuegos”.



    el 20.10.08

 

Especiales