Si mon ordinateur est un système 32 bits, il a une adresse 32 bits, non? Mais quand j’imprime une adresse mémoire en C, pourquoi ai-je une adresse <32 bits?

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); }