Maison >développement back-end >C++ >Pourquoi la modification d'un pointeur dans une fonction C ne modifie-t-elle pas le pointeur d'origine ?

Pourquoi la modification d'un pointeur dans une fonction C ne modifie-t-elle pas le pointeur d'origine ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-27 07:17:09266parcourir

Why Doesn't Modifying a Pointer in a C   Function Change the Original Pointer?

La fonction ne modifie pas le pointeur passé en C

En C , la confusion survient lorsque l'on tente de modifier un pointeur passé à une fonction. Le problème réside dans la nature inhérente des pointeurs. Lorsqu'une fonction reçoit un pointeur comme argument, elle opère en fait sur une copie de ce pointeur, et non sur le pointeur d'origine lui-même.

Considérez l'exemple de fonction clickOnBubble :

bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble *targetBubble) {
    // ... your code
}

Quand vous passez un pointeur en tant que paramètre, la fonction crée une nouvelle copie de ce pointeur dans sa portée locale. Toute modification apportée à la copie locale du pointeur n'affectera pas le pointeur d'origine en dehors de la fonction. Dans le scénario ci-dessus, le code tente d'attribuer targetBubble à un élément du vecteur bulles au sein de la fonction, mais cette affectation ne modifie que la copie locale de targetBubble.

Pour modifier efficacement le pointeur en dehors de la fonction, utilisez soit un pointeur vers un pointeur ou une référence à un pointeur. Cela permet à la fonction d'accéder et de modifier le pointeur d'origine.

Utilisation d'un pointeur vers un pointeur :

void foo(int **ptr) {
    *ptr = new int[10]; // Assign memory to the pointed-to location
}

Dans cet exemple, la fonction foo prend un pointeur à un pointeur comme argument. Il peut désormais modifier lui-même le pointeur en lui attribuant une nouvelle valeur.

Utiliser une référence à un pointeur :

void bar(int *&ptr) {
    ptr = new int[10]; // Assign memory to the pointed-to location
}

Ici, la barre de fonctions prend un référence à un pointeur. Il peut accéder et modifier directement le pointeur d'origine.

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