En la mayoría de los lenguajes de programación de alto y bajo nivel, acceder a un elemento de un vector a través de un índice menor que cero implica acceder a una dirección de memoria que no hemos reservado, y en consecuencia almacenar en un lugar dónde no protegemos el contenido desde el mismo programa.
Para poder usar un índice negativo en el lenguaje C tendremos que declarar otro puntero auxiliar que acceda al espacio de memoria reservado por el anterior para que los menores que cero en ese rango sean equivalentes a sus análogos positivos. El código que ejemplifica este caso:
int a[10] = { /* lo inicializamos a lo que queramos */ };
int *b;
int i;
b = a + 10; /* aquí entra en juego el puntero auxiliar */
for (i = -10; i < 0; i++) {
int x = b[i];
}
Sencillo de entender, pero en PHP la cosa se simplifica con poder usarlo como si de un elemento ubicado en la zona positiva se tratase. Un código de ejemplo para mostrar el funcionamiento en PHP puede ser el siguiente:
$mes[-1] = “Este mes no existe”;
echo “Mes -1: “, $mes[-1], “\n”;
$mes[-100] = “Este mes tampoco existe”;
echo “Mes -100: “, $mes[-100], “\n”;
var_dump($mes);
Y lanzando el script obtenemos lo siguiente:
Mes -1: Este mes no existe
Mes -100: Este mes tampoco existe
array(2) {
[-1]=>
string(18) “Este mes no existe”
[-100]=>
string(23) “Este mes tampoco existe”
}
Sencillo ahora, ¿no? Creo que sobra decir la infinidad de aplicaciones que puede tener este uso. ¿Lo has probado en otros lenguajes?
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
Con Perl no se puede hacer una cosa así. Si intentamos declarar una cosa así:
$meses[-3] = 'Mes inexistente';
Obtendremos este error: Modification of non-creatable array value attempted, subscript -3
Si primero inicializamos un array con valores, y luego intentamos acceder a la posicion -3:
my @meses = qw(Enero Febrero Marzo);
for(@meses){
print;
}
$meses[-3] = 'Mes inexistente';
for(@meses){
print;
}
Perl entiende que queremos acceder a la ultima posición del vector, -3.