Arrays Y Punteros
¿Qué es un Arrays?
Un array es una coleccion ordenada de objetos, llamados elementos del array, todos del mismo tipo. Un array de 10 elementos se declara de la siguiente forma:
float a[100];
El primer elemento de este array es a[0], y el ultimo a[9].
Un array se puede inicializar asi:
float a[3] = {10.1,10.2,10.3};
Si no se indica el tamaño del array, este seráigual al número de elementos que se indiquen:
float x[] = {1.3, 2.4};
Arrays multidimensionales.
Los arrays multidimensionales se declaran:
int a[3][3], b[2][3];
En este ejemplo, a es una matriz 3x3, y b una matriz 2x3. Los elementos se almacenan por filas, al contrario de lo que sucedia en FORTRAN. Asi, podemos inicializar b de la siguiente forma:
int b[2][3] = { {1,2,3}, {4,5,6} };Punteros.
El concepto de puntero está unido a la forma en que los tipos de datos son almacenados en la memoria de un ordenador, ya que denotan la dirección de una variable determinada. El nombre de la variable determina el tipo (char, int, float o double) y su dirección determina donde esta almacenada. Conocer la dirección de una variable es importante porque:
Permite que las funcionescambien el valor de sus argumentos, como veremos en el capítulo siguiente.
Permite pasar vectores de forma eficiente entre funciones: en lugar de copiar cada elemento del vector, se copia la dirección del primer elemento.
Permite reservar memoria en tiempo de ejecución en lugar de en tiempo de compilación, lo que significa que el tamaño de un vector puede ser determinado por el usuario en lugar de porel programador.
El nombre de un array es un puntero al array. Por tanto, los punteros y los arrays están íntimamente ligados en C y en C++.
Terminología básica.
Para entender los punteros y los vectores, es necesario conocer primero como se almacenan los números en la memoria del ordenador. El valor de cada variable en un programa de ordenador se guarda en una sección de memoria cuyotamaño está determinado por el tipo de dato de la variable. La localización de esta sección de memoria es almacenada en la dirección de la variable. Por tanto, es como si cada variable estuviera compuesta de dos partes: su valor y su dirección. Cada celda de memoria se puede considerar compuesta de una parte con el contenido, y otra en la que se almacena la dirección. Esto es análogo a una fila decasas: cada casa tiene diferentes contenidos, y para mirarla necesitamos conocer su dirección.
Las direcciones se representan normalmente por un número hexadecimal, pudiendo contener un carácter, un entero o un real (aunque en realidad todos son almacenados como números binarios).
Para obtener la dirección de una variable se utiliza el operador dirección &:
#include <iostream.h>
main(){
double d = 2.7183;
cout << 'numero = ' << d << '\tdireccion = ' << &d << '\n';
}
El valor de d es 2.7183. El valor de &d es una dirección (donde 2.7183 está almacenado). La dirección es imprimida en formato hexadecimal.
Direcciones y punteros
Un puntero guarda la dirección de un objeto en memoria, y como tal un puntero es también una variable.Puede parecer algo confuso, es como decir que el contenido de una casa es la dirección de otra vivienda. Las direcciones se guardan como números hexadecimales, por lo que no hay ninguna razón por la que no podamos definir otro tipo de dato, similar a un entero, pero a través del cual se puede modificar el valor almacenado en esa dirección. Es importante entender la relación entre punteros ydirecciones:
Cada variable tiene su dirección, que puede ser obtenida mediante el operador unario &.
La dirección de una variable puede ser almacenada en un tipo de dato llamado puntero.
Un puntero en C o en C++ se declara anteponiendo un * al nombre de la variable, que es el operador inverso a &. El puntero apunta entonces a una variable del tipo especificado, y no debe ser usado con...
Regístrate para leer el documento completo.