Maison >développement back-end >C++ >Les pointeurs en C ont-ils une taille fixe quel que soit le type de données vers lequel ils pointent ?

Les pointeurs en C ont-ils une taille fixe quel que soit le type de données vers lequel ils pointent ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-13 18:02:10346parcourir

Do Pointers in C   Have a Fixed Size Regardless of the Data Type They Point To?

Comprendre la taille du pointeur en C

La question se pose : "La taille d'un pointeur dépend-elle de la taille du type vers lequel il pointe , ou les pointeurs conservent-ils toujours une taille fixe ?" Examinons ce concept en nous appuyant sur la question en double.

En C , les pointeurs possèdent généralement une taille fixe. Dans les exécutables 32 bits, ils occupent généralement 32 bits. Cependant, des exceptions existent, comme dans les anciennes versions de Windows, où les pointeurs 16 bits et 32 ​​bits devaient être différenciés.

Considérez l'extrait de code suivant :

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";

Dans ce scénario, le résultat serait le suivant :

  • sizeof(x) : affiche la taille de la variable x, qui est 4 pour un exécutable 32 bits (en supposant que int fait 4 octets).
  • sizeof(xPtr) : affiche la taille de la variable de pointeur xPtr, qui reste généralement fixe comme mentionné précédemment, quel que soit le type vers lequel elle pointe.
  • sizeof(y) : affiche la taille de la variable de caractère y, qui est généralement de 1 octet pour un seul caractère.
  • sizeof(yPtr) : Semblable à xPtr, il affiche la taille de la variable de pointeur yPtr, qui est la même que xPtr.

Il est important de noter que même si les pointeurs ont généralement une taille cohérente, il n'est pas judicieux de se fier à cette hypothèse dans votre code. Si votre programme dépend de pointeurs d'une taille spécifique, vérifiez-le toujours explicitement.

Les pointeurs de fonction sont une exception notable. Leur taille peut varier en fonction de la convention d'appel utilisée par le système ou le compilateur spécifique. Reportez-vous à la réponse fournie par « Jens » pour plus d'informations sur les pointeurs de fonction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn