>백엔드 개발 >C++ >C 함수에서 포인터를 수정해도 원래 포인터가 변경되지 않는 이유는 무엇입니까?

C 함수에서 포인터를 수정해도 원래 포인터가 변경되지 않는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-27 07:17:09266검색

Why Doesn't Modifying a Pointer in a C   Function Change the Original Pointer?

C에서 함수는 전달된 포인터를 변경하지 않습니다.

C에서 함수에 전달된 포인터를 수정하려고 하면 혼란이 발생합니다. 문제는 포인터의 본질적인 특성에 있습니다. 함수가 포인터를 인수로 받으면 실제로는 원래 포인터 자체가 아닌 해당 포인터의 복사본에서 작동합니다.

clickOnBubble 함수 예시를 고려하세요.

bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble *targetBubble) {
    // ... your code
}

포인터를 매개변수로 사용하면 함수는 로컬 범위 내에서 해당 포인터의 새 복사본을 만듭니다. 포인터의 로컬 복사본에 대한 수정 사항은 함수 외부의 원래 포인터에 영향을 주지 않습니다. 위 시나리오에서 코드는 함수 내의 거품 벡터 요소에 targetBubble을 할당하려고 시도하지만 이 할당은 targetBubble의 로컬 복사본만 수정합니다.

함수 외부의 포인터를 효과적으로 수정하려면 다음 중 하나를 사용합니다. 포인터에 대한 포인터 또는 포인터에 대한 참조입니다. 이를 통해 함수는 원래 포인터에 액세스하고 수정할 수 있습니다.

포인터에 대한 포인터 사용:

void foo(int **ptr) {
    *ptr = new int[10]; // Assign memory to the pointed-to location
}

이 예에서 foo 함수는 포인터를 사용합니다. 포인터를 인수로 사용합니다. 이제 포인터 자체를 수정하여 새 값을 할당할 수 있습니다.

포인터에 대한 참조 사용:

void bar(int *&ptr) {
    ptr = new int[10]; // Assign memory to the pointed-to location
}

여기서 함수 표시줄은 포인터에 대한 참조. 원본 포인터에 직접 액세스하고 수정할 수 있습니다.

위 내용은 C 함수에서 포인터를 수정해도 원래 포인터가 변경되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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