Maison >développement back-end >C++ >Les paramètres de pointeur et de référence sont-ils fonctionnellement identiques en C ?

Les paramètres de pointeur et de référence sont-ils fonctionnellement identiques en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 02:13:29732parcourir

Are Pointer and Reference Parameters Functionally Identical in C  ?

Paramètres de pointeur et de référence : un examen détaillé

Question :

Les paramètres du pointeur (par exemple, int foo(bar* p) { ... }) et les paramètres de référence (par exemple, int foo(bar& r) { ... }) se comportent de manière identique en C ?

Réponse :

La différence entre les pointeurs et les références va au-delà de leurs détails d'implémentation dans la norme. Les références incarnent un concept syntaxique de sucre, créant essentiellement des alias pour les variables. Cela permet aux compilateurs d'optimiser le code là où les pointeurs ajouteraient autrement de la complexité.

Équivalence fonctionnelle :

En supposant qu'il n'y ait aucun problème de pointeur nul, les fonctions foo(bar* p) et foo (bar& r) sont essentiellement équivalents si la méthode someInt() n'est pas virtuelle. Les deux fonctions accèdent directement à la fonction membre de l'objet via le paramètre. Cependant, si someInt() est virtuel, la fonction de paramètre basée sur une référence (foo(bar& r)) invoquera la méthode correcte en fonction du type réel de l'objet, tandis que la fonction basée sur un pointeur (foo(bar* p)) le fera toujours. invoquez la méthode de la classe de base.

Attribution à une référence :

La barre d'affectation& ref = *ptr_to_bar ne provoquera aucun découpage. La référence de référence alias l'objet pointé par ptr_to_bar, vous permettant d'accéder directement à ses membres.

Différences supplémentaires :

  • Les références ne peuvent pas être attribuées à NULL.
  • L'adresse d'un pointeur donne l'adresse de la variable de pointeur, tandis que l'adresse d'une référence donne l'adresse de la variable référencée.
  • Les références ne peuvent pas être réaffectées une fois initialisé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!

Déclaration:
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