En void* a
, a
est déclaré comme un pointeur non pas à un void
type mais de type "any" (cas particulier). Une adresse (position en mémoire) est affecté a
, comme pour toute autre variable déclarée, bien sûr.
Après cela, l'expression &a
est évaluée à initialiser la variable (également a
, mais ce n'est pas pertinente) vient de déclarer. Le type d' &a
est "pointeur de pointeur sur n'importe quel type de", qui est un cas particulier de "pointeur vers n'importe quel type d'", entièrement compatible avec le type d' a
. Ergo, pas de compilateur message.
Corollaire: ne pas utiliser void*
si vous voulez vérification de type fort. Quelque chose peut être transformé. Tout le contraire dans le sens inverse, sauf pour void*
lui-même (il serait inutile d'exception qu'un type était incompatible avec lui-même).
Aussi, AFAIR cela vient vraiment de C.