Maison > développement back-end > C++ > Pourquoi ne puis-je pas convertir un pointeur à pointeur en non-const en un pointeur à pointeur en const en C ?

Pourquoi ne puis-je pas convertir un pointeur à pointeur en non-const en un pointeur à pointeur en const en C ?

Susan Sarandon
Libérer: 2025-01-01 02:42:09
original
490 Les gens l'ont consulté

Why Can't I Convert a Pointer-to-Pointer to Non-Const to a Pointer-to-Pointer to Const in C  ?

Conversion de pointeurs : pourquoi des restrictions sur les conversions de pointeur à pointeur ?

En C, il est généralement permis de lancer un pointeur vers un non -type const vers un pointeur vers un type const. Cela suit le principe de « const-correctness », permettant uniquement de modifier des données constantes.

Cependant, une exception particulière se produit lorsqu'il s'agit de pointeurs vers des pointeurs. Contrairement à la conversion susmentionnée, il est interdit de convertir un « pointeur vers pointeur vers non-const » en un « pointeur vers pointeur vers const ».

Considérez cet extrait de code :

char *s1 = 0;
const char *s2 = s1; // OK...
char *a[MAX]; // aka char **
const char **ps = a; // error!
Copier après la connexion

Pourquoi l'affectation de a à ps est-elle illégale ? La réponse réside dans la norme :

const char c = 'c';
char* pc;
const char** pcc = &pc;   // not allowed
*pcc = &c;
*pc = 'C';                // would allow to modify a const object
Copier après la connexion

Dans cet exemple :

  1. c est un caractère constant.
  2. pc est un pointeur non const vers un caractère.
  3. Tenter d'initialiser pcc (un pointeur vers un pointeur vers const) avec &pc est interdit.

Si cette conversion était autorisée, elle permettrait de modifier les objets constants. Par exemple, *pcc pointerait vers un caractère const, mais *pc serait modifiable. Cela viole le principe de l'exactitude const, car cela permet potentiellement de modifier des données constantes.

Par conséquent, la restriction relative à la conversion d'un pointeur en pointeur vers non-const en un pointeur en pointeur vers const découle de la nécessité de maintenir l'intégrité des objets constants et empêcher les modifications involontaires des données.

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