Quand un argument d'une fonction est un tableau pluridimensionnel, toutes les dimensions, sauf la première, doivent être spécifiées dans la déclaration de l'argument formel correspondant (la première dimension peut aussi être spécifiée, mais elle ne sera pas utilisée par le corps de la fonction). Par exemple, dans le cas d'un tableau tridimensionnel, on écrira :
double f(double t[][3][4]);
Les dimensions ne peuvent être spécifiées que par des constantes ; il est illégal de déclarer une fonction ainsi :
void f_illegal(int p, int q, double t[][p][q]);
Comme dans le cas unidimensionnel, il est préférable de passer en argument, séparément, la taille de la première dimension (sauf si l'on travaille toujours avec des tableaux de même taille, fixe)
double f(int m, double t[][3][4]);
et d'appeler f(2,t) si l'on sait que t est un tableau . Le corps de f pourra ainsi utiliser la valeur m de m pour accéder aux t[i] pour . Le fait de spécifier la taille des autres dimensions permet au corps de f de connaître la taille de t[0], t[1], ..., qui est dans cet exemple, donc d'accéder correctement aux éléments t[i][j][k].
Ces contraintes rendent les tableaux à plusieurs dimensions difficilement utilisables dans des bibliothèques. On verra deux autres méthodes pour implémenter des matrices : par des tableaux à une dimension, et par des tableaux de pointeurs.