Essence :
La référence est un alias, le pointeur est une adresse
Spécifique :
1. De manière phénoménale, un pointeur peut changer la valeur sur laquelle il pointe au moment de l'exécution, mais une référence ne changera pas une fois qu'elle est liée à un objet. Cette phrase peut être comprise comme suit : un pointeur peut être réaffecté pour pointer vers un objet différent. Cependant, la référence pointe toujours vers l'objet spécifié lors de l'initialisation et ne peut pas être modifiée ultérieurement, mais le contenu de l'objet spécifié peut être modifié.
2. Du point de vue de l'allocation mémoire, le programme alloue une zone mémoire pour les variables de pointeur mais pas pour les références, car la référence doit être initialisée lorsqu'elle est déclarée pointer vers un objet déjà existant. Les références ne peuvent pas pointer vers des valeurs nulles.
3. Du point de vue de la compilation, le programme ajoute respectivement des pointeurs et des références à la table des symboles lors de la compilation. La valeur d'adresse correspondante de la variable de pointeur dans la table de symboles est la valeur d'adresse de la variable de pointeur, et la valeur d'adresse correspondante de la référence dans la table de symboles est la valeur d'adresse de l'objet référencé.
La table des symboles ne sera pas modifiée après sa génération, donc le pointeur peut changer l'objet vers lequel il pointe (la valeur dans la variable du pointeur peut être modifiée), mais l'objet de référence ne peut pas être modifié. C'est la principale raison pour laquelle l'utilisation de pointeurs n'est pas sûre et l'utilisation de références est sûre. Dans un sens, une référence peut être considérée comme un pointeur qui ne peut pas être modifié.
4. Le fait qu'il n'y ait pas de référence à une valeur nulle signifie que le code utilisant des références est plus efficace que l'utilisation de pointeurs. Car il n’est pas nécessaire de tester la validité d’une référence avant de l’utiliser. En revanche, les pointeurs doivent toujours être testés pour éviter qu'ils ne soient nuls.
5. Théoriquement, il n'y a pas de limite au niveau des pointeurs, mais la référence ne peut être qu'un seul niveau. Comme suit :
int** p1; // 合法。指向指针的指针 int*& p2; // 合法。指向指针的引用 int&* p3; // 非法。指向引用的指针是非法的 int&& p4; // 非法。指向引用的引用是非法的
Attention ! La lecture ci-dessus est de gauche à droite.
Tutoriel recommandé : Tutoriel vidéo PHP
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!