Operador Subscript: []
postfix-expression [ expression ]
Comentários
Uma expressão pós-fixada (que também pode ser uma expressão primária) seguida pelo operador de subscrito, [ ], especifica a indexação da matriz.
Para obter informações sobre matrizes gerenciadas, consulte array (Visual C++).
Geralmente, o valor representado por postfix-expression é um valor de ponteiro, como um identificador de matriz, e expression é um valor de integral (incluindo tipos enumerados). No entanto, tudo o que é necessário sintaticamente é que uma das expressões seja do tipo ponteiro e a outra seja do tipo integral. Assim o valor da integral pode estar na posição de postfix-expression e o valor do ponteiro pode estar entre os colchetes na posição de expression ou do subscrito. Considere o fragmento de código a seguir:
int nArray[5] = { 0, 1, 2, 3, 4 };
cout << nArray[2] << endl; // prints "2"
cout << 2[nArray] << endl; // prints "2"
No exemplo acima, a expressão nArray[2] é idêntica a 2[nArray]. A razão é que o resultado de uma expressão de subscrito e1**[** e2 ] é determinado por:
*( (e2) + (e1) )
O endereço gerado pela expressão não está a e2 bytes do endereço e1. Em vez disso, o endereço é dimensionado para gerar o próximo objeto na matriz e2. Por exemplo:
double aDbl[2];
Os endereços de aDb[0] e aDb[1] estão separados por 8 bytes — o tamanho de um objeto do tipo double. Esse dimensionamento de acordo com o tipo de objeto é executado automaticamente pela linguagem C++ e é definido em Operadores aditivos, onde são abordadas a adição e a subtração de operandos do tipo ponteiro.
Uma expressão subscrita também pode ter vários subscritos, como segue:
expression1 [expression2] [expression3]...
As expressões subscritas são associadas da esquerda para a direita. A expressão subscrita mais à esquerda, expression1**[expression2], é avaliada primeiro. O endereço resultante da adição de expression1 e expression2 forma uma expressão do ponteiro; expression3 é adicionada a essa expressão de ponteiro para formar uma nova expressão de ponteiro, e assim por diante até que a última expressão subscrita seja adicionada. O operador de indireção (***) é aplicado depois que a última expressão subscrita é avaliada, a menos que o valor do ponteiro final trate de um tipo de matriz.
As expressões com vários subscritos referem-se aos elementos de matrizes multidimensionais. Uma matriz multidimensional é uma matriz cujos elementos são matrizes. Por exemplo, o primeiro elemento de uma matriz tridimensional é uma matriz com duas dimensões. O exemplo a seguir declara e inicializa uma matriz bidimensional simples de caracteres:
// expre_Subscript_Operator.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
#define MAX_ROWS 2
#define MAX_COLS 2
int main() {
char c[ MAX_ROWS ][ MAX_COLS ] = { { 'a', 'b' }, { 'c', 'd' } };
for ( int i = 0; i < MAX_ROWS; i++ )
for ( int j = 0; j < MAX_COLS; j++ )
cout << c[ i ][ j ] << endl;
}
Consulte também
Referência
Operadores, precedência e associatividade C++