Dichiarazioni di matrice
Una "dichiarazione di matrice" denomina la matrice e specifica il tipo dei relativi elementi. Può inoltre definire il numero di elementi presenti nella matrice. Una variabile con tipo matrice è considerata un puntatore al tipo di elementi della matrice.
Sintassi
declaration
:
declaration-specifiers
init-declarator-list
optare ;
init-declarator-list
:
init-declarator
init-declarator-list
,
init-declarator
init-declarator
:
declarator
declarator
=
initializer
declarator
:
pointer
optare direct-declarator
direct-declarator
:
direct-declarator
[
constant-expression
optare ]
Poiché constant-expression
è facoltativo, la sintassi ha due forme:
Il primo formato definisce una variabile di matrice. L'argomento
constant-expression
all'interno delle parentesi quadre specifica il numero di elementi nella matrice. L'oggettoconstant-expression
, se presente, deve avere un tipo integrale e un valore maggiore di zero. Ogni elemento ha il tipo specificato datype-specifier
, che può essere qualsiasi tipo trannevoid
. Un elemento matrice non può essere un tipo di funzione.Il secondo formato dichiara una variabile definita altrove. Omette l'argomento
constant-expression
tra parentesi quadre, ma non le parentesi quadre. È possibile usare questo modulo solo se la matrice è stata inizializzata in precedenza, dichiarata come parametro o dichiarata come riferimento a una matrice definita in modo esplicito altrove nel programma.
In entrambi i moduli assegna direct-declarator
un nome alla variabile e può modificare il tipo della variabile. Le parentesi quadre ([ ]
) che seguono direct-declarator
modificano il dichiaratore in un tipo di matrice.
I qualificatori di tipo possono essere visualizzati nella dichiarazione di un oggetto di tipo matrice, ma i qualificatori vengono applicati agli elementi anziché alla matrice stessa.
È possibile dichiarare una matrice di matrici (una matrice "multidimensionale") facendo seguire al dichiaratore della matrice un elenco di espressioni costanti tra parentesi nel seguente formato:
type-specifier
declarator
[
constant-expression
]
[
constant-expression
]
...
Ognuno constant-expression
tra parentesi quadre definisce il numero di elementi in una determinata dimensione: le matrici bidimensionali hanno due espressioni tra parentesi quadre, matrici tridimensionali hanno tre e così via. È possibile omettere la prima espressione costante se la matrice è stata inizializzata, dichiarata come parametro o dichiarata come riferimento a una matrice definita in modo esplicito altrove nel programma.
È possibile definire le matrici di puntatori in diversi tipi di oggetti usando dichiaratori complessi, come descritto in Interpretazione di più dichiaratori complessi.
Le matrici vengono archiviate in base alla riga. Ad esempio, la seguente matrice è composta da due righe con tre colonne ciascuna:
char A[2][3];
Le tre colonne della prima riga vengono archiviate per prime, seguite dalle tre colonne della seconda riga. Significa che l'ultimo pedice varia più rapidamente.
Per fare riferimento a un singolo elemento di matrice usare un'espressione di indice, come descritto nell'argomento Operatori di suffisso.
Esempi
In questi esempi sono illustrate le dichiarazioni di matrici:
float matrix[10][15];
La matrice bidimensionale denominata matrix
ha 150 elementi, ognuno con float
tipo .
struct {
float x, y;
} complex[100];
Questo esempio è una dichiarazione di una matrice di strutture. Questa matrice contiene 100 elementi; ogni elemento è una struttura contenente due membri.
extern char *name[];
Questa istruzione dichiara il tipo e il nome di una matrice di puntatori a char
. L'effettiva definizione di name
viene eseguita altrove.
Sezione specifica Microsoft
Il tipo di integer necessario per contenere la dimensione massima di una matrice è la dimensione di size_t
.
Fine sezione specifica Microsoft