int taco[10]
como un
array de diez enteros, taco
será un puntero al array.
Por ejemplo, sea guacamole
un array de 6 enteros: 6, 63, 112, 18,
-52, 16. guacamole
es simplemente un puntero al primer elemento.
Entonces, *guacamole
equivale al valor 6. Si tratamos de acceder
al elemento guacamole[6]
, estamos accediendo a lo que haya
después del último elemento del array. Los resultados son
inesperados.
# include <iostream.h>
void eat_at_joes(int guacamole[])
{
guacamole[0] = 1;
guacamole[1] = 2;
guacamole[2] = 3;
}
main()
{
int taco[3];
int nacho[2];
eat_at_joes(taco);
eat_at_joes(nacho);
}
Al definir la función, no hemos puesto ningún número
entre los corchetes. Esto significa que estamos permitiendo que un array
de cualquier tamaño pueda ser pasado a la función. En la
función main, hemos declarado dos arrays de enteros, taco y nacho.
Primero pasamos taco a la función, que en realidad es la direccion
del array taco. Ahora bien, el segundo array, nacho, tiene sólo dos
elementos. Cuando la función trate de acceder al tercer elemento
del array, que realmente no existe. Ya que los arrays son muchas variables
almacenadas una detrás de otra en la memoria del ordenador,
tratará y accederá a la variable almacenada despueés
del segundo elemento del array, que no existe.
# include <iostream.h>
void eat_at_joes(int guacamole[], int size)
{
if (size > 0)
guacamole[0] = 1;
if (size > 1)
guacamole[1] = 2;
if (size > 2)
guacamole[2] = 3;
}
main()
{
int taco[3];
int nacho[2];
eat_at_joes(taco,3);
eat_at_joes(nacho,2);
}