Estaba leyendo algo de código y encontraron que la persona estaba usando arr[-2]
para acceder al segundo elemento antes de la arr
, así:¿Se permiten índices de matriz negativos en C?
|a|b|c|d|e|f|g|
^------------ arr[0]
^---------- arr[1]
^---------------- arr[-2]
Eso está permitido?
Sé que arr[x]
es lo mismo que *(arr + x)
. Entonces, arr[-2]
es *(arr - 2)
, lo que parece correcto. ¿Qué piensas?
Tenga en cuenta también que no es necesario desreferenciar el puntero para obtener UB. La mera computación de 'somearray-2' no está definida a menos que el resultado esté en el rango desde el comienzo de' somearray 'a 1 después de su finalización. – RBerteig
En los libros más antiguos se hacía referencia a '[]' como una * sintaxis de azúcar * para la aritmética del puntero. * La forma favorita * de confundir a los principiantes es escribir '1 [arr]' - en lugar de 'arr [1]' - y verlos adivinar lo que eso significa. – Dummy00001
¿Qué sucede en los sistemas de 64 bits (LP64) cuando tiene un índice int de 32 bits que es negativo? ¿Debería promoverse el índice a una int firmada de 64 bits antes del cálculo de la dirección? –