15Close17
squalylOn the 2014-01-04 at 09:28pm
Folco (./14) :
pourquoi, puisqu'un tableau et un pointeur sont la même chose

Ah non, non, non trinon
j'ai passé 2 putains de jours sur un bug dû à cette différence!
PpHd (./15) :
En fait, c'est que l'arithmétique de pointeurs et l'indexage de tableau sont la même chose: a[b] = *(a+b) (et c'est la norme C qui l'impose !)


oui mais si a est déclaré comme tableau, ça marche SEULEMENT pour des nombres positifs! Enfin presque, je m'explique:

avec les déclarations:

int a[]
int *b=a;
int offset;

a+1 est défini, et donne le même code asm que b+1
MAIS
a-1 est TOTALEMENT indéfini et le compilateur peut générer ce qu'il veut, de nop à reboot en passant par system("format c: /y") grin

alors que b-1 fonctionne

a noter que dans tous les cas, a+offset et a-offset ne pose pas de problème et fonctionne comme b+offset et b-offset, car le compilo ne peut rien optimiser!

On a rencontré un compilateur embarqué qui générait de la merde (non destructive, mais non fonctionnelle grin) pour l'expression tableau-offset. Et on n'a pas pu dire que c'était un bug de compilo, parce que ce n'est pas défini par l'ISO C. Mon collègue en a eu la confirmation sur le newsgroup comp.lang.c grin

c'est la seule différence que je connaisse entre tableau et pointeur triso