Déréférencement du pointeur NULL pour référence : interprétation et norme
En C , le code suivant soulève la question de savoir ce que dicte la norme :
int* ptr = NULL; int& ref = *ptr; int* ptr2 = &ref;
Plus précisément, est-il permis de déréférencer un pointeur NULL pour obtenir une référence, et quel est le résultat d'une telle opération ?
Interprétation standard
Selon la norme C, le déréférencement d'un pointeur NULL est considéré comme un comportement indéfini. Ceci est explicitement indiqué dans la section 8.3.2/4 de la norme :
Remarque : en particulier, une référence nulle ne peut pas exister dans un programme bien défini, car la seule façon de créer une telle référence serait de liez-le à « l'objet » obtenu en déréférençant un pointeur nul, ce qui provoque un comportement indéfini.
Implémentation Implications
En pratique, cependant, de nombreux compilateurs implémentent ce comportement en définissant le résultat sur NULL. Cela signifie que ptr2 dans l'extrait de code fourni se verrait attribuer la valeur NULL.
Interprétation du compilateur
Il est important de noter que le comportement décrit ci-dessus n'est pas garanti par la norme et peut varier selon les différents compilateurs et plates-formes. Par exemple, certains compilateurs peuvent déclencher une exception ou effectuer d'autres actions spécifiques à la plate-forme lors du déréférencement d'un pointeur NULL.
Exception spécifique
Une exception à cette règle est l'utilisation de l'opérateur sizeof sur un pointeur NULL. Dans ce contexte, le déréférencement ne se produit pas réellement et sizeof peut être utilisé pour déterminer la taille du type sans provoquer de comportement indéfini.
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!