L-Value 및 R-Value 식L-Value and R-Value Expressions

메모리 위치를 참조하는 식을 "l-value" 식이라고 합니다.Expressions that refer to memory locations are called "l-value" expressions. l-value는 저장소 영역의 "로케이터" 값이나 "왼쪽" 값을 나타내므로 등호(=)의 왼쪽에 나타날 수 있습니다.An l-value represents a storage region's "locator" value, or a "left" value, implying that it can appear on the left of the equal sign (=). l-value는 대개 식별자입니다.L-values are often identifiers.

수정할 수 있는 위치를 참조하는 식을 "수정할 수 있는 l-value"라고 합니다.Expressions referring to modifiable locations are called "modifiable l-values." 수정할 수 있는 l-value는 배열 형식, 불완전한 형식 또는 const 특성이 있는 형식일 수 없습니다.A modifiable l-value cannot have an array type, an incomplete type, or a type with the const attribute. 구조체와 공용 구조체가 수정할 수 있는 l-value이려면 const 특성이 있는 멤버를 포함하지 않아야 합니다.For structures and unions to be modifiable l-values, they must not have any members with the const attribute. 식별자의 이름은 저장소 위치를 나타내지만, 변수의 값은 해당 위치에 저장된 값입니다.The name of the identifier denotes a storage location, while the value of the variable is the value stored at that location.

식별자는 메모리 위치를 참조하고 산술, 구조체, 공용 구조체 또는 포인터 형식인 경우 수정할 수 있는 l-value입니다.An identifier is a modifiable l-value if it refers to a memory location and if its type is arithmetic, structure, union, or pointer. 예를 들어 ptr이 저장소 영역에 대한 포인터이면 *ptrptr이 가리키는 저장소 영역을 나타내는 수정할 수 있는 l-value입니다.For example, if ptr is a pointer to a storage region, then *ptr is a modifiable l-value that designates the storage region to which ptr points.

다음 C 식은 모두 l-value 식일 수 있습니다.Any of the following C expressions can be l-value expressions:

  • 정수 계열, 부동 소수점, 포인터, 구조체 또는 공용 구조체 형식의 식별자An identifier of integral, floating, pointer, structure, or union type

  • 배열로 평가되지 않는 첨자식([ ])A subscript ([ ]) expression that does not evaluate to an array

  • 멤버 선택 식(-> 또는 .)A member-selection expression (-> or .)

  • 배열을 참조하지 않는 단항 간접 참조 식(\)A unary-indirection (****) expression that does not refer to an array

  • 괄호로 묶인 l-value 식An l-value expression in parentheses

  • const 개체(수정할 수 없는 l-value)A const object (a nonmodifiable l-value)

    "r-value"는 식의 값을 설명하고 l-value와 구별하기 위해 때때로 사용됩니다.The term "r-value" is sometimes used to describe the value of an expression and to distinguish it from an l-value. 모든 l-value는 r-value이지만 모든 r-value가 l-value인 것은 아닙니다.All l-values are r-values but not all r-values are l-values.

    Microsoft 전용Microsoft Specific

    Microsoft C에는 개체의 크기가 캐스팅을 통해 길어지지 않는 한 l-value로 사용하기 위해 l-value를 캐스팅할 수 있도록 허용하는 ANSI C 표준의 확장이 포함되어 있습니다.Microsoft C includes an extension to the ANSI C standard that allows casts of l-values to be used as l-values, as long as the size of the object is not lengthened through the cast. 자세한 내용은 형식 캐스팅 변환을 참조하세요. 다음 예제에서는 이 기능을 보여 줍니다.(See Type-Cast Conversions for more information.) The following example illustrates this feature:

char *p ;  
short  i;  
long l;  

(long *) p = &l ;       /* Legal cast   */  
(long) i = l ;          /* Illegal cast */  

기본적으로 Microsoft C에는 Microsoft 확장을 사용하도록 설정되어 있습니다.The default for Microsoft C is that the Microsoft extensions are enabled. 이러한 확장을 사용하지 않도록 설정하려면 /Za 컴파일러 옵션을 사용하십시오.Use the /Za compiler option to disable these extensions.

Microsoft 전용 종료END Microsoft Specific

참고 항목See Also

피연산자 및 식Operands and Expressions