Array[-1] donne-t-il le dernier élément du tableau ?

Array[-1] donne-t-il le dernier élément du tableau ?

Non, l'accès aux éléments en dehors de la plage d'index est un comportement indéfini. Dans votre cas, l'élément à l'adresse juste avant le début de votre tableau est défini sur 27.

Étant donné que l'accès aux éléments du tableau en C n'est rien de plus que de faire de l'arithmétique de pointeur "directe", le passage d'index négatifs n'est pas interdit. Vous pouvez construire un cas d'utilisation légitime où les index sont négatifs et positifs :

int raw[21], *data = &raw[10];
for (int i = -10 ; i <= 10 ; i++) {
    data[i] = i;
}

Non; array[-1] n'accédera pas au dernier élément. Il est plus probable que l'emplacement mémoire juste avant le tableau ait 27 stocké dedans. Essayez ceci :

array[4] = 27;
array[-1] = 0;

Testez ensuite si array[-1] == array[4] . Ils ne seront pas égaux (en supposant que votre programme ne plante pas lors de l'affectation à array[-1] ).


Accéder à des tableaux avec un index hors limites ne fait pas toujours planter votre programme. Si la mémoire accédée par -1 est sous le contrôle de votre programme, une valeur indéfinie apparaîtra (qui a été stockée par d'autres données créées par votre programme). Dans votre cas, c'est une simple coïncidence.