Compartilhar via


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 ]:

  1. O valor inteiro i é multiplicado pelo número de bytes definidos como o comprimento de um item int. O valor convertido de i representa as posições de i int.

  2. Esse valor convertido é adicionado ao valor do ponteiro original (line) para produzir um endereço que está deslocado i int posições de line.

  3. 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.

Confira também

Operador subscript: