関数の動作: C でのポインターの受け渡し
C では、ポインターを関数に渡すと、呼び出し元のスコープ内の元の変数を変更できます。 。ただし、ポインタを扱う場合、特定のニュアンスが生じる可能性があります。
問題:
次の例のように、渡されたポインタを変更する関数を考えてみましょう:
bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *> bubbles, Bubble *targetBubble) { targetBubble = bubbles[i]; }
関数内で「targetBubble」ポインターを変更しても、変更は外部には反映されません。
理由と解決策:
この問題は、ポインターへの参照ではなく、ポインターのコピーを渡すことに起因します。これを修正するには、次のテクニックを利用できます。
ポインタからポインタへ:
ポインタをポインタに渡すことで、元のポインタを変更できます。 pointer:
void foo(int **ptr) //pointer to pointer { *ptr = new int[10]; //just for example, use RAII in a real world }
ポインターへの参照:
元のポインターを直接変更するポインターへの参照を渡します:
void bar(int *&ptr) //reference to pointer (a bit confusing look) { ptr = new int[10]; }
いずれかのアプローチを実装すると、ポインタを効果的に変更できます。スコープを呼び出して、関数内で行われた変更が外部に確実に反映されるようにします。
以上がC 関数に渡されるポインターを変更し、その変更を呼び出しスコープに反映するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。