C의 참조 재할당 이해
C에서는 선언 시 참조를 초기화해야 하며 재할당할 수 없다는 것이 일반적으로 알려져 있습니다. 그러나 최근의 실험에서는 이러한 개념에 대한 의문이 제기되었습니다. 다음 프로그램에서 참조 재할당 동작을 조사해 보겠습니다.
#include <iostream> #include <stdio.h> #include <conio.h> using namespace std; int main() { int i = 5, j = 9; int &ri = i; cout << "ri is : " << ri << "\n"; i = 10; cout << "ri is : " << ri << "\n"; ri = j; // *** Reassignment at Issue *** cout << "ri is : " << ri << "\n"; getch(); return 0; }
프로그램은 참조 ri를 정수 변수 i에 할당하여 ri를 i의 별칭으로 만듭니다. 처음에 ri는 값 5를 가리킵니다. i를 10으로 수정하면 ri가 이 변경 사항을 올바르게 반영합니다. 그러나 중요한 점은 다음 문입니다: ri = j.
이것은 참조의 재할당이 아닌가요?
대답은 놀랍게도 no입니다. ri는 여전히 i에 대한 참조입니다. 이를 입증하기 위해 ri와 i의 주소를 비교할 수 있습니다. 두 주소는 동일합니다. 당신이 관찰하고 있는 것은 참조의 재할당이 아니라 ri가 가리키는 메모리 위치에 저장된 값의 수정입니다.
간단히 말하면 ri = j는 *(&ri) = j와 같습니다. 여기서 &ri는 ri의 메모리 주소를 검색하고 *는 값에 액세스하기 위해 이를 역참조합니다.
비교를 위해 const int &cri = i를 생성하면 모든 것을 방지합니다. cri에 재할당하여 상수 특성을 적용합니다.
요약하자면 C에서는 참조를 새 변수에 재할당할 수 없지만 프로그램에서 볼 수 있듯이 참조하는 개체의 값을 수정하는 데 사용할 수 있습니다.
위 내용은 C에서 참조를 재할당할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!