Matrizes unidimensionais
Uma expressão de pós-fixação seguida por uma expressão entre colchetes ([ ]
) é uma representação assinada de um elemento de um objeto da matriz. Uma expressão subscrita representa o valor no endereço que está na posição expression
, além de postfix-expression
quando expresso como
postfix-expression
[
expression
]
Geralmente, o valor representado por postfix-expression
é um valor do ponteiro, como um identificador de matriz e expression
é um valor integral. No entanto, sintaticamente basta que uma das expressões tenha o tipo ponteiro e a outra o tipo integral. O valor do integral pode estar na posição postfix-expression
e o valor do ponteiro pode estar entre colchetes na posição expression
ou "subscrito". Por exemplo, esse código é válido:
// one_dimensional_arrays.c
int sum, *ptr, a[10];
int main() {
ptr = a;
sum = 4[ptr];
}
Expressões subscritas geralmente são usadas para se referir a elementos de matriz, mas você pode aplicar uma subscrita a qualquer ponteiro. Independentemente da ordem dos valores, expression
deve estar entre colchetes ([ ]
).
A expressão subscrita é avaliada mediante adição do valor integral ao valor do ponteiro, seguida por aplicação do operador de indireção (*
) ao resultado. (Consulte Operadores de indireção e endereço para encontrar uma discussão do operador de indireção). Na verdade, para uma matriz unidimensional, as quatro expressões a seguir são equivalentes, supondo que a
seja um ponteiro e b
seja um inteiro:
a[b]
*(a + b)
*(b + a)
b[a]
As regras de conversão do operador de adição são fornecidas em Operadores aditivos). Para converter o valor integral em um intervalo de endereço, ele é multiplicado pelo comprimento do tipo endereçado pelo ponteiro.
Por exemplo, suponha que o identificador line
faça referência a uma matriz de valores int
. O procedimento a seguir é usado para avaliar a expressão subscrita line[ i ]
:
O valor inteiro
i
é multiplicado pelo número de bytes definidos como o comprimento de um itemint
. O valor convertido dei
representa as posições dei
int
.Esse valor convertido é adicionado ao valor do ponteiro original (
line
) para produzir um endereço que está deslocadoi
int
posições deline
.O operador de indireção é aplicado ao novo endereço. O resultado é o valor do elemento da matriz nessa posição (intuitivamente,
line [ i ]
).
A expressão subscrita line[0]
representa o valor do primeiro elemento de linha, desde que o deslocamento de endereço representado por line
seja 0. Similarmente, uma expressão como line[5]
se refere ao deslocamento de cinco posições do elemento da linha, ou o sexto elemento da matriz.