Si on doit écrire des fonctions opérant sur des matrices dont la taille n'est pas connue, la représentation bidimensionnelle des matrices n'est pas utilisable. On représente alors une matrice par un tableau unidimensionnel, et les deux dimensions sont passées en arguments aux fonctions :
void f(int lignes, int colonnes, double t[]);
Dans le corps de la fonction, on remplace un accès à la ligne et la colonne par un accès calculé à t[i * colonnes + j]21. Par exemple, on pourra écrire une fonction d'initialisation de la façon suivante :
void init(int lignes, int colonnes, double t[]) { int i, j; for(i=0; i<lignes; i++) { for(j=0; j<colonnes; j++) { t[i * colonnes + j] = double(i+j)/2; } } }
On peut alors définir un tableau unidimensionnel t et l'initialiser par :
const int LIGNES = 3, COLONNES = 4; double t[LIGNES * COLONNES]; init(LIGNES, COLONNES, t);