Parce que l'arithmétique des pointeurs fonctionne en unités du type pointé. Par exemple :
int* p_num = malloc(10 * sizeof(int));
int* p_num2 = p_num + 5;
Ici, p_num2
n'a pas de point cinq octets au-delà de p_num
il indique cinq nombres entiers au-delà de p_num
. Si, sur votre machine, un entier a une largeur de quatre octets, l'adresse stockée dans le fichier p_num2
sera de vingt octets de plus que celui stocké dans p_num
. La raison en est principalement que les pointeurs peuvent être indexés comme des tableaux. p_num[5]
est exactement équivalent à *(p_num + 5)
Il ne serait donc pas logique que l'arithmétique des pointeurs fonctionne toujours en octets, sinon p_num[5]
vous donnerait des données qui commencent au milieu du deuxième entier, plutôt que de vous donner le sixième entier comme vous vous y attendiez.
Afin de déplacer un nombre spécifique de octets au-delà d'un pointeur, vous devez faire en sorte que le pointeur pointe vers un type dont la largeur est garantie à exactement 1 octet (un char
).
De plus, vous avez une erreur ici :
printf("\nSIZE : [%d]\nSIZE : [%d]\n", size);
Vous avez deux spécificateurs de format mais un seul argument après la chaîne de format.