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 :
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!