Los
punteros proporcionan la mayor parte de la potencia a C++,
y marcan la principal diferencia con otros lenguajes de programación.
Una
buena comprensión y un buen dominio de los punteros pondrá
en tus manos una herramienta de gran potencia. Un conocimiento mediocre
o incompleto te impedirá desarrollar programas eficaces.
Por eso le dedicaremos mucha atención y mucho espacio a los
punteros. Es muy importante comprender bien cómo funcionan
y cómo se usan.
Para
entender qué es un puntero veremos primero cómo
se almacenan los datos en un ordenador.
La memoria de un ordenador está compuesta por unidades básicas
llamadas bits. Cada
bit sólo puede tomar dos valores, normalmente denominados
alto y bajo, ó 1 y 0. Pero trabajar con bits no es práctico,
y por eso se agrupan.
Cada grupo de 8 bits forma un byte u octeto. En realidad
el microprocesador, y por lo tanto nuestro programa, sólo
puede manejar directamente bytes o grupos de dos o cuatro
bytes. Para acceder a los bits hay que acceder antes a los bytes.
Y aquí llegamos al quid,
cada byte tiene una dirección, llamada normalmente dirección
de memoria.
La
unidad de información básica es la palabra,
dependiendo del tipo de microprocesador una palabra puede estar
compuesta por dos, cuatro, ocho o dieciséis bytes. Hablaremos
en estos casos de plataformas de 16, 32, 64 ó 128 bits. Se
habla indistintamente de direcciones de memoria, aunque las palabras
sean de distinta longitud.
Cada dirección de memoria contiene siempre un byte. Lo que
sucederá cuando las palabras sean de 32 bits es que accederemos
a posiciones de memoria que serán múltiplos de 4.
Todo esto sucede en el interior de la máquina, y nos importa
más bien poco, pero es nececesario para entender que son
los punteros.
Ahora
veremos cómo funcionan los punteros.
Un
puntero es un tipo especial de variable que contiene,
ni más ni menos que, una dirección de memoria.
Por supuesto, a partir de esa dirección de memoria puede
haber cualquier tipo de objeto: un char, un int, un float,
un array, una estructura, una función u otro puntero. Seremos
nosotros los responsables de decidir ese contenido.
Un
puntero es una variable que contiene la dirección de otra
variable.
También podríamos decir que un puntero es una
variable que representa la posición en memoria (más
que el valor) de otro dato, tal como una variable o un elemento
de un array. Asi, sera logico que si en una variable de tipo entero,
almacenamos un valor como 7 o 12335, el valor que depositaremos
en una variable de tipo puntero sera #1230 o #2141.
|