Maison >développement back-end >C++ >Comment les pointeurs sont-ils transmis comme arguments en C , par valeur ou par référence ?

Comment les pointeurs sont-ils transmis comme arguments en C , par valeur ou par référence ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-06 16:56:141018parcourir

How Are Pointers Passed as Arguments in C  , by Value or by Reference?

Passer des arguments de pointeur : passer par valeur ou passer par référence en C

En C, les arguments sont généralement transmis par valeur, y compris les pointeurs. Lorsqu'un pointeur est passé en argument, l'adresse de l'objet vers lequel il pointe est copiée dans le paramètre de la fonction. Cela signifie que toute modification apportée au pointeur lui-même dans la fonction ne sera pas reflétée en dehors de la fonction.

Cependant, les modifications apportées à l'objet pointé par le pointeur seront reflétées, car l'objet d'origine est modifié via la référence du pointeur. Par conséquent, il est acceptable et constitue une procédure standard d'utiliser un pointeur vers un pointeur comme argument d'une fonction pour modifier la valeur du pointeur dans cette fonction.

Par exemple, considérons le code suivant :

void ModifyPointer(int **ptr) {
  *ptr = new int;
}

int main() {
  int *ptr = new int;
  ModifyPointer(&ptr);
  return 0;
}

Dans ce code, la fonction ModifyPointer prend un pointeur vers un pointeur comme argument. Au sein de la fonction, un nouvel objet int est alloué et le pointeur référencé par le paramètre est mis à jour pour pointer vers le nouvel objet.

Puisque le pointeur d'origine est modifié via le pointeur vers pointeur, le changement se reflète dans le fonction principale. La variable ptr pointe désormais vers l'objet int nouvellement alloué.

En C , il est préférable d'utiliser des références au lieu de pointeurs autant que possible. Les références offrent des fonctionnalités similaires aux pointeurs mais avec une syntaxe plus propre et une vérification de type plus forte.

Par exemple, l'exemple ci-dessus peut être réécrit à l'aide d'une référence :

void ModifyPointer(int *&ptr) {
  ptr = new int;
}

int main() {
  int *ptr = new int;
  ModifyPointer(ptr);
  return 0;
}

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