Compartir a través de


Operador de subíndice: []

postfix-expression [ expression ]

Comentarios

Una expresión de postfijo (que también puede ser una expresión primaria) seguida del operador de subíndice, [ ], especifica la indexación de matrices.

Para obtener información sobre las matrices administradas, vea matriz (Visual C++).

Normalmente, el valor representado por postfix-expression es un valor de puntero, como un identificador de matriz, y expression es un valor entero (incluidos los tipos enumerados). Sin embargo, todo lo que se necesita desde el punto de vista sintáctico es que una de las expresiones sea de tipo puntero y que la otra sea de tipo entero. Así pues, el valor entero podría estar en la posición de postfix-expression y el valor de puntero podría estar en los corchetes de la posición de expression o subíndice. Observe el fragmento de código siguiente:

   int nArray[5] = { 0, 1, 2, 3, 4 };
   cout << nArray[2] << endl;            // prints "2"
   cout << 2[nArray] << endl;            // prints "2"

En el ejemplo anterior, la expresión nArray[2] es idéntica a 2[nArray]. La razón es que el resultado de una expresión de subíndice e1**[** e2 ] viene determinado por:

*( (e2) + (e1) )

La dirección producida por la expresión no es e2 bytes desde la dirección e1. En su lugar, la dirección se ha ampliado para producir el siguiente objeto en la matriz e2. Por ejemplo:

double aDbl[2];

Las direcciones de aDb[0] y aDb[1] están alejadas 8 bytes: el tamaño de un objeto de tipo double. Esta ampliación según el tipo de objeto se realiza automáticamente en el lenguaje C++ y se define en Operadores de suma donde se describe la suma y resta de operandos de tipo puntero.

Una expresión de subíndice también puede tener varios subíndices, como se indica a continuación:

expression1 [expression2] [expression3]...

Las expresiones de subíndice se asocian de izquierda a derecha. La expresión de subíndice del extremo izquierdo, expression1**[expression2], se evalúa primero. La dirección resultante de agregar expression1 y expression2 forma una expresión de puntero; entonces, se agrega expression3 a esta expresión de puntero para formar una nueva expresión de puntero, y así sucesivamente, hasta que se haya agregado la última expresión de subíndice. El operador de direccionamiento indirecto (***) se aplica después de que evalúe la última expresión de subíndice, a menos que el valor del puntero final apunte a un tipo de matriz.

Las expresiones con varios subíndices hacen referencia a elementos de matrices multidimensionales. Una matriz multidimensional es una matriz cuyos elementos son matrices. Por ejemplo, el primer elemento de una matriz tridimensional es una matriz con dos dimensiones. En el ejemplo siguiente se declara y se inicializa una matriz bidimensional de caracteres simple:

// 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;
}

Vea también

Referencia

Expresiones postfijas

Operadores de C++

Operadores de C++, precedencia y asociatividad

Matrices (C++)

Conceptos

Matrices unidimensionales

Matrices multidimensionales (C)