>백엔드 개발 >C++ >C 함수에 전달된 포인터를 수정하고 호출 범위에 해당 변경 사항을 반영하려면 어떻게 해야 합니까?

C 함수에 전달된 포인터를 수정하고 호출 범위에 해당 변경 사항을 반영하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-26 10:15:16483검색

How Can I Modify a Pointer Passed to a C   Function and Reflect Those Changes in the Calling Scope?

함수 동작: C에서 포인터 전달

C에서 함수에 포인터를 전달하면 호출 범위에서 원래 변수를 수정할 수 있습니다. . 그러나 포인터를 다룰 때 미묘한 차이가 발생할 수 있습니다.

문제:

다음 예와 같이 전달된 포인터를 수정하는 함수를 고려하세요.

bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *> bubbles, Bubble *targetBubble) {
    targetBubble = bubbles[i];
}

함수 내에서 'targetBubble' 포인터를 수정해도 변경 사항이 외부에 반영되지 않습니다.

이유 및 해결 방법:

이 문제는 포인터에 대한 참조가 아닌 복사본을 전달하는 데서 발생합니다. 이 문제를 해결하려면 다음 기술을 활용할 수 있습니다.

  1. 포인터 대 포인터:
    포인터를 포인터에 전달하면 원본을 수정할 수 있습니다. 포인터:

    void foo(int **ptr) //pointer to pointer
    {
        *ptr = new int[10]; //just for example, use RAII in a real world
    }
  2. 참조 포인터:
    원래 포인터를 직접 수정하는 포인터에 대한 참조를 전달합니다.

    void bar(int *&ptr) //reference to pointer (a bit confusing look)
    {
        ptr = new int[10];
    }

두 가지 접근 방식 중 하나를 구현하면 포인터를 효과적으로 수정할 수 있습니다. 범위를 호출하여 함수 내에서 변경된 사항이 외부에 반영되도록 합니다.

위 내용은 C 함수에 전달된 포인터를 수정하고 호출 범위에 해당 변경 사항을 반영하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.