함수 동작: C에서 포인터 전달
C에서 함수에 포인터를 전달하면 호출 범위에서 원래 변수를 수정할 수 있습니다. . 그러나 포인터를 다룰 때 미묘한 차이가 발생할 수 있습니다.
문제:
다음 예와 같이 전달된 포인터를 수정하는 함수를 고려하세요.
bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *> bubbles, Bubble *targetBubble) { targetBubble = bubbles[i]; }
함수 내에서 'targetBubble' 포인터를 수정해도 변경 사항이 외부에 반영되지 않습니다.
이유 및 해결 방법:
이 문제는 포인터에 대한 참조가 아닌 복사본을 전달하는 데서 발생합니다. 이 문제를 해결하려면 다음 기술을 활용할 수 있습니다.
포인터 대 포인터:
포인터를 포인터에 전달하면 원본을 수정할 수 있습니다. 포인터:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!