Declarações de matriz
Uma "declaração de matriz" nomeia a matriz e especifica o tipo dos respectivos elementos. Também pode definir o número de elementos na matriz. Uma variável com tipo de matriz é considerada um ponteiro para o tipo dos elementos da matriz.
Sintaxe
declaration
:
declaration-specifiers
init-declarator-list
opt ;
init-declarator-list
:
init-declarator
init-declarator-list
,
init-declarator
init-declarator
:
declarator
declarator
=
initializer
declarator
:
pointer
opt direct-declarator
direct-declarator
:
direct-declarator
[
constant-expression
opt ]
Como constant-expression
é opcional, a sintaxe tem dois formatos:
O primeiro formato define uma variável de matriz. O argumento
constant-expression
entre colchetes especifica o número de elementos na matriz. Oconstant-expression
, se estiver presente, deve ter um tipo integral e um valor maior que zero. Cada elemento tem o tipo indicado portype-specifier
, que pode ser qualquer tipo excetovoid
. Um elemento da matriz não pode ser um tipo de função.O segundo formato declara uma variável que foi definida em outro lugar. Ele omite o argumento
constant-expression
entre colchetes, mas não os colchetes. Você só poderá usar esse formulário se já tiver inicializado a matriz, declarado-a como um parâmetro ou declarado-a como uma referência a uma matriz definida explicitamente em outro lugar do programa.
Nos dois formatos, direct-declarator
nomeia a variável e pode modificar o tipo dela. Os colchetes ([ ]
) depois de direct-declarator
modificam o declarador para um tipo de matriz.
Qualificadores de tipo podem aparecer na declaração de um objeto de tipo de matriz, mas se aplicam aos elementos, e não à própria matriz.
Você pode declarar uma matriz de matrizes (uma matriz "multidimensional") colocando uma lista de expressões de constantes entre colchetes após o declarador de matriz, neste formato:
type-specifier
declarator
[
constant-expression
]
[
constant-expression
]
...
Cada constant-expression
entre colchetes define o número de elementos em uma determinada dimensão: as matrizes bidimensionais têm duas expressões entre colchetes, as matrizes tridimensionais têm três e assim por diante. Você poderá omitir a primeira expressão constante se tiver inicializado a matriz, declarado-a como um parâmetro ou declarado-a como uma referência a uma matriz definida explicitamente em outro lugar do programa.
É possível definir matrizes de ponteiros para diversos tipos de objetos usando declaradores complexos, conforme descrito em Interpretar declaradores mais complexos.
As matrizes são armazenadas por linha. Por exemplo, a seguinte matriz consiste em duas linhas com três colunas cada:
char A[2][3];
As três colunas da primeira linha são armazenadas primeiro, seguidas pelas três colunas da segunda linha. Isso significa que o último subscrito varia mais com mais rapidez.
Para fazer referência a um elemento individual de uma matriz, use uma expressão de subscrito, conforme descrito em Operadores pós-fixados.
Exemplos
Estes exemplos ilustram declarações de matrizes:
float matrix[10][15];
A matriz bidimensional nomeada matrix
tem 150 elementos, cada um deles com o tipo float
.
struct {
float x, y;
} complex[100];
Este exemplo é uma declaração de uma matriz de estruturas. Essa matriz tem 100 elementos; cada elemento é uma estrutura que contém dois membros.
extern char *name[];
Essa instrução declara o tipo e o nome de uma matriz de ponteiros para char
. A definição real de name
ocorre em outro lugar.
Seção específica da Microsoft
O tipo de inteiro necessário para manter o tamanho máximo de uma matriz é o tamanho de size_t
.
Fim da seção específica da Microsoft