다음 코드에서 *a
은 rvalue 또는 lvalue입니까?* p는 왼쪽 값 또는 오른쪽 값입니다.
#include <stdio.h>
void main()
{
int b=2;
int *a=NULL;
a=&b;
*a=3;
printf("%d",*a);
}
다음 코드에서 *a
은 rvalue 또는 lvalue입니까?* p는 왼쪽 값 또는 오른쪽 값입니다.
#include <stdio.h>
void main()
{
int b=2;
int *a=NULL;
a=&b;
*a=3;
printf("%d",*a);
}
는 http://en.wikipedia.org/wiki/Value_%28computer_science%29 노광 같이
Lvalues 프로그래밍 실행 프로그램으로 액세스 할 수있는 메모리 어드레스가 (예 : "&"와 같은 일부 주소의 연산자를 통해 C/C++로) 이는 특정 메모리 위치에 대한 참조 또는 참조 해제 된 참조임을 의미합니다. 우변이 lvalues (아래 참조) 또는 비 lvalues
될 수있다 따라서, *는 그것은 좌변이고 r 값의 용어로도 사용될 수있다 좌변
이다. 예제를 참조하십시오.
int i, j, *p, *q;
p = &i;
q = &j;
*p = 1; // *p is l-value
*q = 2; // *q is l-value
*p = *q // *q is r-value
그의 주석에
Charles Bailey 의해 지적
-이 문맥에서 사용되는 서브 표현식 *q
여전히 L 값이다 그것은 R 치화에 L 값을 겪는다 여기서 r 값이 필요합니다. *q
여전히 리터 값 왜
이제 하나 를 생각?
r 값의 정의에 따라 이 있으므로 r 값은이를 사용하는 표현식을 초과하여 지속되지 않는 임시 값입니다.
이 경우 *q
값은 *p = *q
수식을 초과하여 유지됩니다.
참고
"*"연산자 - 복종/간접 연산자 - 포인터 변수에 동작하고, 포인터의 주소 값과 동등한 L 값를 반환 .
+1 암시 적 읽기 액세스를 고려해야합니다. –
'* q '는 여전히 lvalue이며, rvalue가 필요한 컨텍스트에서 사용되기 때문에 lvalue-to-rvalue 변환을 거칩니다. –
@CharlesBailey; 그래 네가 맞아. 실제로 나는 r 값으로 l 값을 사용할 수 있다는 것을 보여 주려고했습니다. 가리켜 줘서 고마워. 편집 중이 야. – haccks
할당 할 수있는 경우 lvalue입니다. 좀 더 복잡한 것을 묻고 있습니까? –
오른쪽에 있으면 _r_ 값입니다. 네덜란드어로 donkeybridge 전화;) – dmaij
+1 좋은 질문. 그것은 미묘한 점을 가지고있다. 1) 동일한 변수를 지칭하는 동일한 문자는 다른 의미를 갖는다. 2) 일반적인 왼쪽과 오른쪽 규칙은 함수의 인자를 다루지 않습니다. –