Maison > développement back-end > C++ > Le déréférencement d'un pointeur NULL pour obtenir une référence peut-il être bien défini en C ?

Le déréférencement d'un pointeur NULL pour obtenir une référence peut-il être bien défini en C ?

Patricia Arquette
Libérer: 2024-12-11 04:48:11
original
265 Les gens l'ont consulté

Can Dereferencing a NULL Pointer to Get a Reference Be Well-Defined in C  ?

Pouvez-vous déréférencer un pointeur NULL pour acquérir une référence ?

La norme C définit le déréférencement d'un pointeur NULL comme un comportement indéfini. Cependant, les extraits de code impliquant le déréférencement d'un pointeur NULL pour obtenir une référence, tels que les suivants, soulèvent des questions :

int* ptr = NULL;
int& ref = *ptr;
int* ptr2 = &ref;
Copier après la connexion

Définition standard :

Selon la norme C (8.3.2/4 "Références"), une référence nulle ne peut pas exister dans un programme bien défini. En effet, la création d'une telle référence nécessiterait de la lier à « l'objet » obtenu en déréférençant un pointeur nul, ce qui constitue un comportement indéfini.

Détail d'implémentation ou bien défini ?

En pratique, l'extrait de code fourni entraîne la définition de ptr2 sur NULL. Cependant, il ne s’agit là que d’un détail d’implémentation. La norme indique explicitement que le déréférencement d'un pointeur nul n'est pas défini.

Impact du déréférencement d'un pointeur NULL :

En général, le déréférencement d'un pointeur nul entraîne un crash. Dans le cas spécifique de son utilisation pour obtenir une référence, le compilateur implémente la référence comme un pointeur, éliminant ainsi l'opération de déréférencement proprement dite. Néanmoins, le comportement sous-jacent non défini demeure.

Exception : l'opérateur sizeof

L'exception au déréférencement d'un pointeur nul d'une manière bien définie est l'opérateur sizeof. Lors de l'utilisation de sizeof, l'opérande n'est pas évalué, évitant ainsi l'opération de déréférencement.

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