> 백엔드 개발 > C++ > C 참조가 Null이 될 수 있나요?

C 참조가 Null이 될 수 있나요?

Patricia Arquette
풀어 주다: 2024-12-14 06:36:21
원래의
946명이 탐색했습니다.

Can C   References Ever Be Null?

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿