Maison > développement back-end > C++ > Tous les pointeurs ont-ils la même taille en C ?

Tous les pointeurs ont-ils la même taille en C ?

Mary-Kate Olsen
Libérer: 2024-10-31 00:14:30
original
814 Les gens l'ont consulté

 Are All Pointers the Same Size in C  ?

Tous les pointeurs ont-ils la même taille en C ?

La question se pose de savoir si tous les pointeurs en C partagent une taille uniforme. Bien que cela soit souvent supposé, la norme C fournit des informations définitives sur cette question.

Spécifications de la norme C

La norme C garantit explicitement :

  • void et char sont de taille égale (section [basic.compound]/5).
  • Pointeurs vers différentes versions qualifiées en cv du même type (T const, T volatile et T const volatile*) partagent la même taille ([basic.compound]/3).
  • Les pointeurs vers des types enum avec des types sous-jacents identiques ont la même taille (section [dcl.enum] /9).

Considérations pratiques

En pratique, les pointeurs vers les types de classes conservent généralement des tailles identiques. Cela est dû à l'exigence selon laquelle le compilateur doit déterminer la taille de T* sans définir complètement T. Bien que les compilateurs disposent d'une certaine flexibilité dans la taille des pointeurs, cela est rarement utilisé dans les scénarios du monde réel.

De plus, les pointeurs de fonction , les pointeurs vers les membres de données et les pointeurs vers les membres de fonction ont généralement la même taille. Cela permet une réinterprétation transparente entre ces types de pointeurs.

Exceptions

Une exception notable se produit dans les architectures segmentées, où les pointeurs proches et lointains peuvent différer en taille. Ce cas défie les règles habituelles en matière d'uniformité de la taille des pointeurs.

Conclusion

La norme C précise que les pointeurs void* et qualifiés cv ont une taille uniforme. Alors que les pointeurs vers différents types héritent généralement de la même taille, des considérations pratiques suggèrent que les pointeurs vers les types de classe, les pointeurs de fonction et les pointeurs vers les données membres partagent tous une taille unifiée. Cependant, les architectures segmentées présentent une exception, les pointeurs proches et lointains ayant potentiellement des tailles différentes.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal