Par exemple
printf("%u",&a);
me donne la sortie
65524
qui est une adresse 16 bits.
Parce que vous avez utilisé un spécificateur de format incorrect qui invoque un comportement non défini .
Pour imprimer un pointeur, vous devez utiliser le spécificateur de format %p
et convertir l’argument en void*
. Quelque chose comme
printf("%p",(void *)&a);
va faire le travail.
Cela dit, vous devriez commencer par examiner les concepts de mémoire virtuelle .
Vous pouvez également simplement répondre à votre hypothèse sur la taille de l’adresse en vérifiant la taille de tout pointeur au lieu de l’adresse d’une variable de test:
printf("%zu\n", sizeof(int*)); printf("%zu\n", sizeof(float*));
En supposant qu’un octet dans tous les systèmes équivaut à huit bits, vous pouvez voir la taille de l’adresse.
S’il vous plaît voir ce post SO
Pour trouver l’adresse la plus élevée possible pour (la plupart des) systèmes actuels, procédez comme suit:
#include #include int main(void) { uintptr_t uip = (uintptr_t) -1; void * vp = (void*) uip; printf("%p\n", vp); }