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!
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
Dans cet exemple :
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!