86 votes

Quelle est la taille d'un pointeur ?

La taille d'un pointeur est-elle la même que la taille du type vers lequel il pointe, ou les pointeurs ont-ils toujours une taille fixe ? Par exemple...

 int x = 10;
int * xPtr = &x;
char y = 'a';
char * yPtr = &y;

std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";

Quel en serait le résultat ? sizeof(xPtr) renverraient-ils 4 et sizeof(yPtr) renverraient-ils 1, ou les 2 pointeurs renverraient-ils en fait la même taille ? La raison pour laquelle je pose cette question est que les pointeurs stockent une adresse mémoire et non les valeurs de leurs adresses stockées respectives.

93voto

Jens Points 2355

Les pointeurs de fonction peuvent avoir des tailles très différentes , de 4 à 20 octets sur une machine X86, selon le compilateur. La réponse est donc NON - les tailles peuvent varier.

Autre exemple : prenons un programme 8051, il a trois plages de mémoire et a donc trois tailles de pointeur différentes, de 8 bits, 16 bits, 24 bits, selon l'endroit où se trouve la cible, même si la taille de la cible est toujours la même (par exemple char) .

38voto

peeyush Points 1233

Sur une machine 32 bits, la taille du pointeur est de 32 bits (4 octets), tandis que sur une machine 64 bits, elle est de 8 octets. Quel que soit le type de données vers lequel ils pointent, ils ont une taille fixe.

16voto

Jay Points 6999

Pour répondre à ton autre question. La taille d'un pointeur et la taille de ce qu'il pointe ne sont pas liées. Une bonne analogie est de les considérer comme des adresses postales. La taille de l'adresse d'une maison n'a aucun rapport avec la taille de la maison.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X