Partilhar via


Expressões de valor L e valor R

As expressões que se referem a locais de memória são chamadas de expressões de "valor l". Um valor l representa o valor "localizador" de uma região de armazenamento, ou um valor "esquerda", implicando que ele pode aparecer à esquerda do sinal de igual (=). Os valores L são frequentemente identificadores.

As expressões que se referem a locais modificáveis são chamadas de "valores L modificáveis". Um valor L modificável não pode ter um tipo de matriz, um tipo incompleto ou um tipo com o const atributo. Para que as estruturas e sindicatos sejam valores l modificáveis, eles não devem ter nenhum membro com o const atributo. O nome do identificador indica um local de armazenamento, enquanto o valor da variável é o valor armazenado nesse local.

Um identificador é um valor l modificável se se referir a um local de memória e se seu tipo for aritmético, estrutura, união ou ponteiro. Por exemplo, se ptr for um ponteiro para uma região de armazenamento, então *ptr é um valor l modificável que designa a região de armazenamento para a qual ptr pontos.

Qualquer uma das seguintes expressões C pode ser expressões de valor l:

  • Um identificador de integral, flutuante, ponteiro, estrutura ou tipo de união

  • Uma expressão subscrita ([ ]) que não avalia uma matriz

  • Uma expressão de seleção de membros (-> ou .)

  • Uma expressão unary-indirection (*) que não se refere a uma matriz

  • Uma expressão de valor l entre parênteses

  • Um const objeto (um valor l não modificável)

O termo "valor-r" é por vezes usado para descrever o valor de uma expressão e para distingui-lo de um valor l. Todos os valores l são valores r, mas nem todos os valores r são valores l.

Específico da Microsoft

O Microsoft C inclui uma extensão para o padrão ANSI C que permite que versões de valores L sejam usadas como valores l, desde que o tamanho do objeto não seja alongado através da transmissão. Para obter mais informações, consulte Type-Cast conversões. O exemplo a seguir ilustra esse recurso:

char *p ;
short  i;
long l;

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

O padrão para o Microsoft C é que as extensões da Microsoft estão habilitadas. Use a opção de compilador /Za para desativar essas extensões.

END Específico da Microsoft

Ver também

Operandos e expressões