Maison >développement back-end >C++ >Pourquoi mon pointeur ne change-t-il pas après l'avoir passé à une fonction ?

Pourquoi mon pointeur ne change-t-il pas après l'avoir passé à une fonction ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-26 12:23:101018parcourir

Why Doesn't My Pointer Change After Passing It to a Function?

Comprendre le problème : passage de pointeur non modifié

Dans cet extrait de code, la fonction clickOnBubble reçoit un pointeur vers un objet Bubble (targetBubble) et un vecteur de pointeurs de bulles (bulles). Le problème est qu'une fois la fonction exécutée, le pointeur targetBubble transmis à la fonction reste inchangé. On s'attend à ce que la fonction modifie le pointeur targetBubble pour pointer vers une bulle spécifique dans le vecteur de bulles, mais cela ne se produit pas.

Passer une copie du pointeur

La raison de ce comportement est que vous transmettez une copie du pointeur targetBubble, pas une référence. Lorsque vous transmettez une copie d'un pointeur, toute modification apportée au pointeur dans la fonction ne sera pas reflétée dans le pointeur d'origine en dehors de la fonction.

Solution : Utiliser une référence de pointeur ou un pointeur vers un pointeur

Pour vous assurer que le pointeur targetBubble en dehors de la fonction est modifié, vous devez passer une référence au pointeur ou utiliser un pointeur vers pointeur.

Utilisation d'une référence de pointeur :

void clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble *&targetBubble) {
    targetBubble = bubbles[i]; // Modified pointer here is reflected outside function
}

Utilisation d'un pointeur vers pointeur :

void clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble **targetBubble) {
    *targetBubble = bubbles[i]; // Modified pointer here is reflected outside function
}

Dans dans les deux cas, le pointeur targetBubble modifié dans la fonction sera reflété dans le pointeur targetBubble d'origine en dehors de la fonction. fonction.

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