C에서 참조 재할당
C에서 참조는 종종 메모리 주소에 대한 불변 바인딩으로 설명됩니다. 그러나 최근 한 질문은 이러한 이해에 의문을 제기했습니다. 이 주제를 살펴보기 위해 다음 C 프로그램을 살펴보겠습니다.
#include <iostream> int main() { int i = 5, j = 9; int &ri = i; std::cout << "ri is: " << ri << '\n'; i = 10; std::cout << "ri is: " << ri << '\n'; ri = j; // Is this not reassigning the reference? std::cout << "ri is: " << ri << '\n'; return 0; }
이 코드는 성공적으로 컴파일되고 출력은 다음과 같습니다.
ri is: 5 ri is: 10 ri is: 9
질문이 생깁니다. 할당이 ri가 아닌가요? =j; 불변 참조 개념에 모순됩니까?
아니요, ri는 여전히 i에 대한 참조입니다. 이는 ri와 i의 주소를 인쇄하고 두 주소가 동일한지 확인하여 확인할 수 있습니다.
실제로 발생한 것은 ri 참조를 사용하여 i 값을 수정하는 것입니다. 참조가 불변이고 항상 동일한 메모리 위치를 가리켜야 하기 때문에 ri에 새 값을 할당하는 것은 실제로 금지됩니다.
비교를 위해 다음 코드를 고려하세요.
const int &cri = i;
이것은 코드는 cri에 대한 할당을 허용하지 않습니다. 왜냐하면 cri는 상수에 대한 참조이기 때문입니다. 이는 참조를 새 메모리 위치에 재할당할 수는 없지만 값이 변경 가능하다면 참조하는 주소에서 값을 수정하는 데 여전히 사용할 수 있음을 보여줍니다.
결론적으로 ri = j; 원래 프로그램의 할당은 참조 자체를 재할당하는 것이 아니라 참조하는 값을 수정하는 것입니다.
위 내용은 C 참조를 재할당할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!