The Phantom of Null 참조: Are They Real?
질문이 생깁니다. 참조가 C에서 null이 될 수 있습니까? 다음 코드 조각을 고려해보세요.
int &nullReference = *(int*)0;
놀랍게도 g와 clang 모두 엄격한 플래그를 사용하더라도 경고 없이 이를 컴파일합니다. 그러나 nullReference를 역참조하려고 하면 정의되지 않은 동작이 호출됩니다.
문제의 핵심은 참조와 포인터의 차이에 있습니다. C 표준에 따르면 참조는 유효한 개체나 함수로 초기화되어야 합니다. 정의에 따라 null 참조는 잘 정의된 프로그램에 존재할 수 없습니다. 이러한 참조를 생성하는 유일한 방법은 이를 null 포인터를 역참조하여 얻은 "객체"에 바인딩하는 것입니다. 이는 엄격히 금지됩니다.
따라서 nullReference 선언은 구문상 널 포인터 할당과 유사할 수 있지만, 이는 실제로 Null 참조를 나타내지 않습니다. 컴파일러는 이를 유효하지 않은 작업으로 인식하고 임의의 메모리 위치를 할당합니다.
이러한 오해는 참조를 포인터처럼 취급하는 데서 비롯됩니다. 포인터에는 정의되지 않은 위치를 나타내는 null 값이 할당될 수 있습니다. 그러나 참조는 항상 유효한 엔터티를 가리켜야 합니다. null 참조를 생성하거나 액세스하려는 시도는 참조 동작의 기본 원칙에 어긋나기 때문에 C에서는 소용이 없습니다.
위 내용은 C 참조가 Null이 될 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!