>백엔드 개발 >C++ >C와 C에서 문자열 리터럴은 L-값이고 다른 리터럴은 R-값인 이유는 무엇입니까?

C와 C에서 문자열 리터럴은 L-값이고 다른 리터럴은 R-값인 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-28 11:15:12901검색

Why Are String Literals L-Values in C and C   While Other Literals Are R-Values?

문자열 리터럴은 L-값이고 다른 리터럴은 R-값인 이유

C 및 C에서 문자열 리터럴은 모든 리터럴이 r이라는 규칙의 예외입니다. -가치. C 03 표준에서는 다른 리터럴이 r 값인 반면 문자열 리터럴은 l 값이라고 명시합니다. 마찬가지로 C99 표준에서는 문자열 리터럴을 l-값으로 정의합니다.

이유

이러한 구별은 문자열 리터럴이 객체라는 특성에서 비롯됩니다. 고정된 값을 나타내는 다른 리터럴과 달리 문자열 리터럴은 배열 유형의 개체입니다. C에서는 배열이 표현식의 l-값으로만 존재할 수 있습니다.

문자열 리터럴을 더 유용하게 만들려면 배열 유형 대신 포인터 유형을 갖도록 정의하는 것은 비현실적입니다. 이렇게 하면 문자열 리터럴에 sizeof 연산자를 적용할 수 없습니다.

복합 리터럴의 경우

C99 표준에서는 l-값이기도 한 복합 리터럴을 도입했습니다. 그들의 도입은 특별한 예외가 아닌 리터럴이 l-값이라는 표준으로의 전환을 암시합니다. 복합 리터럴을 사용하면 특정 값으로 초기화된 임시 개체를 만들 수 있습니다. 문자열 리터럴과 마찬가지로 l-값으로 존재합니다.

역사적 맥락

이러한 구별의 이유는 하드웨어 아키텍처에 뿌리를 두고 있을 수도 있습니다. 초기 컴퓨터에서는 문자열이 문자 배열에 대한 포인터가 아닌 문자 배열로 저장되었습니다. 이러한 역사적 맥락은 문자열 리터럴을 l-값으로 정의하는 선택에 영향을 미쳤을 수 있습니다.

결론

문자열 리터럴은 배열 유형의 개체이기 때문에 C 및 C에서 l-값으로 정의됩니다. 다른 리터럴은 고정된 값인 반면 문자열 리터럴은 수정되거나 참조될 수 있는 개체입니다. 이러한 구별을 통해 프로그래밍에서 문자열 리터럴을 보다 유연하게 사용할 수 있습니다.

위 내용은 C와 C에서 문자열 리터럴은 L-값이고 다른 리터럴은 R-값인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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