Je vais poster encore une autre réponse, car il n'y a vraiment quelque chose à ajouter ici.
unsigned *p = *(unsigned**)(((unsigned long)&i) & ~8191);
résultats dans les p étant le pointeur au début de la 8192 octets la taille du bloc de mémoire. Toutefois, le code est erroné. Si p est au-dessus de INT_MAX (qui peut être ou il serait en fonte non signé, pas unsigned long), le haut-bits obtenir cisaillée par le masque. Bon code est comme suit:
unsigned *p = *(unsigned**)(((ptrdiff_t)&i) & ~(ptrdiff_t)8191);
ou à l'aide de uintptr_t:
unsigned *p = *(unsigned**)(((uintptr_t)&i) & ~(uintptr_t)8191U);
Il est nécessaire de jeter en entier et à l'arrière de pointeur pour que le code du travail; toutefois, pour garantir un int-pointeur de la taille nécessite l'utilisation de ptrdiff_t (nous rappelons que les entiers signés et non signés se comportent exactement de la même pour les opérations bit à bit). Quant à savoir pourquoi ils n'ont pas les écrire avec hex constantes, qui s'en soucie. Les gars qui font ce genre de choses connaître leurs puissances de 2 par cœur. Il peut être plus rapide à lire 8191 puis 0x1FFF.