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 중국어 웹사이트의 기타 관련 기사를 참조하세요!