ホームページ >バックエンド開発 >C++ >ポインタを関数に渡してもポインタが変化しないのはなぜですか?

ポインタを関数に渡してもポインタが変化しないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-26 12:23:101018ブラウズ

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

問題の理解: 未変更のポインターの受け渡し

このコード スニペットでは、clickOnBubble 関数は Bubble オブジェクト (targetBubble) へのポインターを受け取り、バブル ポインター (バブル) のベクトル。問題は、関数が実行された後、関数に渡された targetBubble ポインターが変更されないことです。関数は、バブル ベクトル内の特定のバブルを指すように targetBubble ポインタを変更する必要があると期待されますが、これは行われません。

ポインタのコピーの受け渡し

この動作の理由は、参照ではなく、targetBubble ポインターのコピーを渡しているためです。ポインタのコピーを渡すと、関数内でポインタに加えられた変更は、関数外の元のポインタには反映されません。

解決策: ポインタ参照またはポインタからポインタを使用する

関数の外にある targetBubble ポインターが確実に変更されるようにするには、ポインターへの参照を渡すか、ポインターを使用してpointer.

ポインタ参照の使用:

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

ポインタ間ポインタの使用:

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

Inどちらの場合も、関数内で変更された targetBubble ポインターは元の targetBubble ポインターに反映されます。関数の外。

以上がポインタを関数に渡してもポインタが変化しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。