Les variables dimensionnées sont des variables regroupées sous un même nom auxquelles on accède par un numéro appelé indice.
Par analogie avec les mathématiques, on parle souvent de vecteur pour des variables a une dimension (et de matrice pour les variables à deux dimensions).
Ces variables sont évidement typées, et l'on indique l'élément auquel on veut accéder en précisant son indice entre crochets droits : [ ].
Exemple :
int A[10] ; // crée une variable de 10 éléments entiers numérotés des 0 à 9
float B[12] ; // crée une variable de 10 éléments réels numérotés des 0 à 11
Le premier indice en langage C est zéro
typedef :
Il est possible de définir des types de variables à l'aide de l'instruction typedef.
De manière générale, on préfère définir des types, ce qui facilite la lecture du programme. La syntaxe du typedef pour créer des variables dimensionnées est la suivante :
typedef type_de_depart Nom_nouveau_type[ nbre_d_elements ] ;
Par exemple :
typedef int vect[ 10 ] ; // tableau a 1 dimension : vecteur
typedef vect mat[ 10 ] ; // tableau a 2 dimensions : matrice
La première instruction crée un nouveau type de variable correspondant à une variable dimensionnée de 10 entiers. Il est possible de créer une variable de ce nouveau type par :
vect a; // a est un vecteur il contient 10 int
De même, on peut créer variable a deux dimensions :
mat b ; // b est une matrice de b[0][0] à b[9][9]
b est une variable a deux dimensions. On accède aux éléments de b avec deux jeux d'indices :
b[0][3] = 8;
On peut aussi bien sur créer une variable à deux dimensions sans typedef :
float c[10][10] ;
Cela fonctionne aussi. L’avantage du typedef est une meilleure lisibilité, surtout avec les fonctions.
Initialisation à la déclaration :
Il est possible d'initialiser une variable à sa déclaration en précisant entre accolades les valeurs servant à initialiser la variable. Il n'est pas nécessaire de renseigner toutes les valeurs de la variable dimensionnée, les valeurs non précisées étant automatiquement mises à zéro.
int a = { 2, 3, 5 } ;
vect b = { 3, 5, 6, 8} ;
mat c = { {1, 2, 3}, {4, 5, 6 } };
vect d = {0} ;
a est un "vecteur" qui débutera le programme avec les valeurs suivantes :
a[0] contient 2
a[1] contient 3
a[2] contient 5
de a[3] à a[9] contiennent 0;
b est un "vecteur" qui débutera le programme avec les valeurs suivantes :
b[0] contient 3
b[1] contient 5
b[2] contient 6
b[3] contient 8
de b[4] à b[9] contiennent 0;
c est une "matrice" qui débutera le programme avec les valeurs suivantes :
c[0][0] contient 1
c[0][1] contient 2
c[0][2] contient 3
de c[0][3] à c[0][9] contiennent 0;
c[1][0] contient 4
c[1][1] contient 5
c[1][2] contient 6
de c[1][3] à c[9][9] contiennent 0;
d est un "vecteur" qui débutera le programme avec les valeurs suivantes :
d[0] à d[9] contiennent 0;