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
Libérer: 2024-12-27 07:17:09
original
269 Les gens l'ont consulté

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
}
Copier après la connexion

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
}
Copier après la connexion

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
}
Copier après la connexion

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!

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