Maison > développement back-end > C++ > Quand devriez-vous utiliser des références ou des pointeurs en C ?

Quand devriez-vous utiliser des références ou des pointeurs en C ?

Barbara Streisand
Libérer: 2024-11-20 14:45:17
original
522 Les gens l'ont consulté

When Should You Use References vs. Pointers in C  ?

Comprendre le passage par référence et par pointeur en C

En C, passer des arguments aux fonctions par référence ou par pointeur est une pratique courante pour modifier les valeurs réelles en dehors de la portée de la fonction . Cependant, comprendre quand utiliser ce qui peut prêter à confusion.

Passage par référence

Le passage par référence permet un accès direct et une modification de la variable d'origine. Il est utile pour :

  • Muter des objets volumineux (par exemple, des chaînes, des vecteurs) pour éviter les copies inutiles.
  • Transmettre des arguments d'entrée-sortie où les deux fonctions utilisent la même variable.

Passage par pointeur

Le passage par pointeur fournit un accès indirect à la variable via un pointeur. C'est nécessaire lorsque :

  • Le pointeur doit être manipulé (par exemple, réaffecté à un nouvel objet).
  • Passer une valeur nulle, ce qui n'est pas autorisé pour les références.
  • Empêcher les modifications de la variable d'origine (passer un pointeur const).

Bonnes pratiques

En règle générale, il est recommandé d'utiliser références lorsque :

  • Vous souhaitez muter la variable d'origine.
  • Vous avez une valeur non nulle à transmettre.
  • La variable d'origine n'est pas excessivement grande.

Utilisez des pointeurs lorsque :

  • Vous devez manipuler l'adresse de la variable.
  • Vous avez des valeurs nullables.
  • Vous souhaitez empêcher les modifications de la variable d'origine.

Exemple

L'extrait suivant illustre un scénario courant dans lequel une référence est utilisée pour transmettre un objet volumineux :

void foo(std::string& s) {
  s += "suffix";
}
Copier après la connexion

Le passage par pointeur conviendrait dans ce cas si la fonction devait créer un nouvel objet chaîne :

void foo(std::string* s) {
  *s = "new string";  // Deallocates the old string
}
Copier après la connexion

Dans de rares cas, le passage par valeur peut également être approprié, comme comme lorsque copier un petit objet immuable (par exemple, un type primitif) n'est pas un problème.

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