Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una expresión de postfijo seguida de una expresión entre corchetes ( [ ]
) es una representación de subíndice de un elemento de un objeto de matriz. Una expresión de subíndice representa el valor en la dirección, es decir, posiciones de expression
más allá de postfix-expression
cuando se expresa como
postfix-expression
[
expression
]
Normalmente, el valor representado por postfix-expression
es un valor de puntero, tal como un identificador de matriz y expression
es un valor entero. Sin embargo, todo lo que se necesita desde el punto de vista sintáctico es que una de las expresiones tenga el tipo puntero y que la otra tenga el tipo entero. 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. Por ejemplo, este código es válido:
// one_dimensional_arrays.c
int sum, *ptr, a[10];
int main() {
ptr = a;
sum = 4[ptr];
}
Las expresiones suscritas a menudo se utilizan para hacer referencia a elementos de matriz, pero se puede aplicar un subíndice a cualquier puntero. Sea cual sea el orden de los valores, expression
se debe incluir entre corchetes ( [ ]
).
La expresión de subíndice se evalúa sumando el valor entero al valor del puntero y, después, aplicando el operador de direccionamiento indirecto (*
) al resultado. (Vea Direccionamiento indirecto y dirección de operadores para ver una descripción del operador de direccionamiento indirecto). De hecho, en una matriz unidimensional, las cuatro expresiones siguientes son equivalentes, suponiendo que a
es un puntero y b
es un entero:
a[b]
*(a + b)
*(b + a)
b[a]
Las reglas de conversión para el operador de suma se proporcionan en Operadores de adición). Para convertir el valor integral en un desplazamiento de dirección, se multiplica por la longitud del tipo al que se dirige el puntero.
Por ejemplo, suponga que el identificador line
hace referencia a una matriz de valores int
. El procedimiento siguiente se utiliza para evaluar la expresión de subíndice line[ i ]
:
El valor entero
i
se multiplica por el número de bytes definido como la longitud de un elementoint
. El valor convertido dei
representa las posicionesi
int
.Este valor convertido se suma al valor del puntero original (
line
) para producir una dirección que está desplazada a las posicionesi
int
con respecto aline
.El operador de direccionamiento indirecto se aplica a la nueva dirección. El resultado es el valor del elemento de matriz en esa posición (de manera intuitiva,
line [ i ]
).
La expresión de subíndice line[0]
representa el valor del primer elemento de la línea, ya que el desplazamiento respecto a la dirección representada por line
es 0. De igual forma, una expresión tal como line[5]
hace referencia al elemento desplazado cinco posiciones respecto a la línea o al sexto elemento de la matriz.