Compartilhar via


Matrizes multidimensionais (C)

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 de ponteiro. Em seguida, expression3 é adicionado 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 a 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.

Exemplos

Para os exemplos a seguir, uma matriz chamada prop é declarada com três elementos, cada um deles sendo uma matriz 4 por 6 de valores int.

int prop[3][4][6];
int i, *ip, (*ipp)[6];

Uma referência à matriz prop é semelhante a esta:

i = prop[0][0][1];

O exemplo mostra como fazer referência ao segundo elemento int individual de prop. As matrizes são armazenadas por linha, de modo que o último subscrito varie mais rapidamente; a expressão prop[0][0][2] se refere ao próximo (terceiro) elemento da matriz, e assim por diante.

i = prop[2][1][3];

Essa instrução é uma referência mais complexa a um elemento individual de prop. A expressão é avaliada como segue:

  1. O primeiro subscrito, 2, é multiplicado pelo tamanho de uma matriz int 4 por 6 e é adicionado ao valor do ponteiro prop. O resultado aponta para a terceira matriz 4 por 6 de prop.

  2. O segundo subscrito, 1, é multiplicado pelo tamanho da matriz int de 6 elementos e é adicionado ao endereço representado por prop[2].

  3. Cada elemento da matriz de seis elementos é um valor int, portanto, o subscrito final, 3, é multiplicado pelo tamanho de um int antes de ser adicionado a prop[2][1]. O ponteiro resultante é pertinente ao quarto elemento da matriz de 6 elementos.

  4. O operador de indireção é aplicado ao valor do ponteiro. O resultado é o elemento int nesse endereço.

Estes dois exemplos mostram casos em que o operador de indireção não é aplicado.

ip = prop[2][1];

ipp = prop[2];

Na primeira instrução, a expressão prop[2][1] é uma referência válida à matriz tridimensional prop e refere-se a uma matriz de seis elementos (já declarada). Como o valor do ponteiro trata de uma matriz, o operador de indireção não é aplicado.

Da mesma forma, o resultado da expressão prop[2] na segunda instrução ipp = prop[2]; é um valor de ponteiro pertinente a uma matriz bidimensional.

Confira também

Operador subscript: