Membros de união e estrutura
Uma "expressão de seleção de membros" faz referência a membros de estruturas e de uniões. Essas expressões têm o valor e o tipo do membro selecionado.
postfix-expression
.
identifier
postfix-expression
->
identifier
A lista a seguir descreve os dois formatos de expressões de seleção de membros:
No primeiro formato,
postfix-expression
representa um valor do tipostruct
ouunion
eidentifier
nomeia um membro da estrutura ou da união especificada. O valor da operação é o deidentifier
e é um l-value sepostfix-expression
for um l-value. Para obter mais informações, confira Valor L e expressões de valor R.No segundo formato,
postfix-expression
representa um ponteiro para uma estrutura ou união eidentifier
nomeia um membro da estrutura ou união especificada. O valor é o deidentifier
e um l-value.
Os dois formatos de expressões de seleção de membros têm efeitos semelhantes.
Na verdade, uma expressão envolvendo o operador de seleção de membro (->
) é uma versão abreviada de uma expressão usando o ponto (.
) quando a expressão antes do ponto consiste no operador de indireção (*
) aplicado a um valor de ponteiro. Portanto,
expression->identifier
é equivalente a
(*expression).identifier
quando expression
for um valor do ponteiro.
Exemplos
Os exemplos a seguir fazem referência a essa declaração de estrutura. Para obter informações sobre o operador de indireção (*
) usado nestes exemplos, consulte o tópico sobre operadores Indirection e Address-of.
struct pair
{
int a;
int b;
struct pair *sp;
} item, list[10];
Uma expressão de seleção de membros para a estrutura item
é semelhante a:
item.sp = &item;
No exemplo, o endereço da estrutura item
é atribuído ao membro sp
da estrutura. Isso significa que item
contém um ponteiro para si mesmo.
(item.sp)->a = 24;
Neste exemplo, a expressão de ponteiro item.sp
é usada com o operador de seleção de membro (->
) para atribuir um valor ao membro a
.
list[8].b = 12;
Essa instrução mostra como selecionar um membro individual da estrutura em uma matriz de estruturas.