Em C, as matrizes são armazenadas em memória contígua, assim como os vetores. Isso significa que todos os seus elementos ocupam posições consecutivas na memória.

No caso das matrizes bidimensionais, a linguagem utiliza o padrão conhecido como row-major order (ordem por linhas).

Armazenamento por Linhas

No modelo row-major, os elementos da matriz são armazenados da seguinte forma:

  1. Todos os elementos da primeira linha;
  2. Em seguida, todos os elementos da segunda linha;
  3. E assim sucessivamente.

Considere a matriz:

1  2  3
4  5  6

Na memória, os elementos serão organizados assim:

1  2  3  4  5  6

Ou seja, a matriz é armazenada como se fosse um único vetor contínuo.

Relação com Vetores

Essa forma de armazenamento permite interpretar a matriz como um vetor de vetores, onde cada linha é armazenada sequencialmente.

Por exemplo:

int mat[2][3];

Na memória, temos:

Todos armazenados em sequência.