>백엔드 개발 >C++ >C에서 참조를 재할당할 수 있나요?

C에서 참조를 재할당할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-05 20:03:11921검색

Can References Be Reassigned in C  ?

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

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