L'arithmétique des pointeurs pour les nuls pointeur en C

Lorsqu'un pointeur vers un type particulier (disons int, char, float, ..) est incrémenté, sa valeur est augmentée par la taille de ce type de données. Si un void pointeur qui pointe vers les données de taille x est incrémenté, comment fait-il pour point x octets à l'avance? Comment le compilateur de savoir à ajouter x à la valeur du pointeur de la souris?

  • double possible de Erreur d'Exécution de l'Arithmétique Pointeur sur void * dans MSVC
  • La question sonne comme si elle suppose que le compilateur(/run-time) sait quel type d'objet, le pointeur a été mis à, et ajoute à sa taille pour le pointeur. C'est un malentendu: il ne connaît que l'adresse.
  • "Si un void pointeur qui pointe vers les données de taille x est incrémenté, comment fait-il pour point x octets à l'avance?" Il n'a pas. Pourquoi pas des gens qui ont de telles questions de les tester avant de vous poser la question: tu sais, au moins pour le strict minimum où ils vérifient s'il en fait la compile, ce qui ne l'est pas. -1, ne peut pas croire que cela fait +de 100 et de 0.