Soustraction d’adresse de tableau en C

Dupliquer possible:
Pointeur Arithmétique En C

Code:

int main() { int a[ ] ={0,1,2,3,4}; char c[ ] = {'s','a','n','j','u'}; printf("%d\n",&a[3]-&a[0]); printf("%d\n",&c[3]-&c[0]); return 0; } 

Pourquoi la sortie est 3 3 3 pour les deux, si nous considérons la différence dans les adresses, ils seront différents pour les deux ??

En arithmétique de pointeur, la soustraction renvoie la différence, non pas en octets, mais dans le type du pointeur entre deux pointeurs.

Donc, puisque la différence en int entre a[3] et a[0] est identique à la différence en char s entre c[3] et c[0] – vous obtenez le même résultat pour les deux.

L’arithmétique pour l’opération de soustraction de pointeurs est quelque chose comme:

 type* p1 = ... type* p2 = ... p1 - p2 == (((int)p1) - (int(p2))) / sizeof(type)