Maison > développement back-end > C++ > le corps du texte

Pointeurs vs références dans les fonctions C : équivalence fonctionnelle ou différences subtiles ?

Susan Sarandon
Libérer: 2024-11-03 00:43:29
original
1001 Les gens l'ont consulté

Pointers vs. References in C   Functions: Functional Equivalence or Subtle Differences?

Paramètres de pointeur ou de référence : équivalence fonctionnelle et différences subtiles

En C, les pointeurs et les références sont tous deux utilisés comme paramètres de fonctions, mais ils diffèrent par leur comportement et leur sémantique. Examinons les principales différences entre ces deux types de paramètres.

Foo() et foo() sont-ils équivalents ?

L'extrait ci-dessous montre deux fonctions avec des types de paramètres différents. :

<code class="cpp">int foo(bar* p) {
  return p->someInt();
}

int foo(bar& r) {
  return r.someInt();
}</code>
Copier après la connexion

Fonctionnellement, ces deux fonctions sont équivalentes si les conditions suivantes sont remplies :

  • someInt() n'est pas virtuelle.
  • Les fonctions sont passées une instance de bar ou de ses sous-classes.

La raison est que les paramètres de pointeur et de référence fournissent un accès direct au même emplacement mémoire. Dans ce cas, la différence de syntaxe d'accès (., ->) est insignifiante.

Affectation via pointeur et référence

La ligne ci-dessous démontre une opération d'affectation impliquant un pointeur et une référence :

<code class="cpp">bar& ref = *ptr_to_bar;</code>
Copier après la connexion

Cette affectation n'entraîne aucun découpage ni perte de données. Il attribue la valeur de l'objet pointé par ptr_to_bar à la référence de référence.

Différences subtiles au-delà de la fonctionnalité

Bien que les pointeurs et les références aient des fonctionnalités équivalentes dans l'exemple ci-dessus, il y a des différences subtiles à noter :

  • Nullable : Les pointeurs peuvent se voir attribuer NULL, alors que les références ne le peuvent pas.
  • Déréférencement : Prendre le L'adresse d'un pointeur donne l'adresse de la variable de pointeur, tandis que prendre l'adresse d'une référence donne l'adresse de la variable référencée.
  • Réaffectation : Les références ne peuvent pas être réaffectées une fois initialisées, tandis que les pointeurs peut être réaffecté pour pointer vers différents objets.

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