On peut définir un tableau à deux dimensions en l'initialisant ainsi :
int t[][3] = {
  {1,2,3},
  {4,5,6}
};
Cette définition  déclare t comme un   nom dont le type  est <<
tableau de  tableaux de trois  int  >>, puis alloue un  bloc de
mémoire  pouvant  contenir  2 fois  3  int, consécutivement, et
enfin initialise ce bloc en y  écrivant les entiers 1, 2,  3, 4, 5 et 6.
t est une expression constante dont la  valeur est l'adresse du
bloc alloué.  On  accède   à  ses  éléments   par double  indexation   :
t[0][0], t[0][1],  t[0][2], t[1][0],
t[1][1]         et      t[1][2].
La figure 
 indique la  disposition en mémoire d'un tableau
à deux dimensions :  c'est un rangement  << par lignes >>,  c'est-à-dire
que les éléments d'une même ligne du tableau sont rangés consécutivement
en   mémoire
.
Comme t est un tableau, une indexation partielle est admise : t[0] et t[1] désignent des tableaux de dimension 1 et de taille 3. Les expressions t[0] et t[1] sont aussi des expressions constantes, dont la valeur est l'adresse du bloc contenant respectivement la première et la seconde ligne du tableau ; leur type est << tableau de 3 int >>.
   
 
Figure: Tableau à deux dimensions
Dans le cas usuel où il n'y a pas d'initialisation, il faut spécifier la taille dans chaque dimension :
int t[2][3];