Déréférencement de pointeur : pourquoi la conversion en « pointeur en pointeur vers const » est interdite
En C, il est permis de convertir un pointeur -to-non-const vers un pointeur vers const. Cependant, la conversion d'un pointeur vers pointeur vers non-const en un pointeur vers pointeur vers const n'est pas autorisée. Cela soulève la question : pourquoi ?
Pour comprendre le raisonnement derrière cette restriction, il faut envisager le déréférencement de pointeur. Lors du déréférencement d’un pointeur à pointeur, cela représente l’accès à la valeur pointée par le pointeur le plus interne. Par exemple, considérons le code :
int i = 10; int *ptr = &i; int **pptr = &ptr;
Ici, **pptr est équivalent à *ptr, qui est simplement la valeur i.
Cependant, si nous devions autoriser la conversion en un pointeur vers pointeur vers const, une opération de déréférencement similaire donnerait une valeur constante. Cela introduirait une incohérence, brisant l’immuabilité des pointeurs const. Par exemple :
char *s1 = 0; const char *s2 = s1; // OK... char *a[MAX]; // aka char ** const char **ps = a; // Error!
Ici, s2 est un pointeur const, ce qui signifie qu'il ne peut pointer vers autre chose. Cependant, si ps était autorisé, nous pourrions potentiellement le déréférencer pour obtenir a, puis modifier la valeur de a, modifiant ainsi la valeur pointée par s2, ce qui est interdit.
Par conséquent, pour maintenir l'intégrité de const pointeurs, le langage interdit la conversion d’un pointeur vers pointeur vers non-const en un pointeur vers pointeur vers const. Cela garantit que l'immuabilité des pointeurs const est préservée, empêchant ainsi les modifications involontaires des valeurs constantes.
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!