Um lvalue (abreviação de "valor localizador") é uma variável ou outra expressão que denota um local de memória. Em outras palavras, é um valor esquerdo ou algo ao qual você pode atribuir um valor.
Uma constante, uma variável, uma matriz ou um membro da estrutura podem ser considerados lvalores, pois atendem a esse requisito.
Aqui estão alguns exemplos de lvalues em C:
```c
matriz interna[10];
int* ponteiro_para_array =&array;
int principal() {
matriz[0] =10; // array[0] é um lvalue
(*ponteiro_para_matriz) =10; // *pointer_to_array também é um lvalue
retornar 0;
}
```
No entanto, nem todas as expressões são lvalues. Por exemplo, chamadas de função e valores literais não são considerados lvalores.
```c
função int(int a) {
// a não é um lvalue
retorne um + 10;
}
int principal() {
// 10 não é um lvalue
10 + 5;
}
```
A distinção entre lvalues e rvalues (expressões que não denotam uma localização de memória) é crucial porque apenas lvalues podem ser modificados com um operador de atribuição (=).
Aqui está um exemplo para demonstrar a diferença:
```c
int principal() {
// a é um lvalue
intuma =10;
// b é um rvalor
int b =10 + 5;
uma +=5; // Isso é válido, pois a é um lvalue
// Este é um erro em tempo de compilação, pois b é um rvalue
b+=5;
}
```
Então, em resumo, um lvalue é qualquer coisa que corresponda a um local de memória e que possa estar no lado esquerdo de uma atribuição (=).