C n'a pas vraiment des tableaux multidimensionnels, mais il y a plusieurs façons de les simuler. La manière de passer de telles matrices à une fonction dépend de la manière dont elles sont utilisées pour simuler les multiples dimensions:
1) Utilisez une matrice de matrices. Cela ne peut être utilisé que si vos limites du tableau sont entièrement déterminées au moment de la compilation, ou si votre compilateur prend en charge VLA's:
#define ROWS 4
#define COLS 5
void func(int array[ROWS][COLS])
{
int i, j;
for (i=0; i<ROWS; i++)
{
for (j=0; j<COLS; j++)
{
array[i][j] = i*j;
}
}
}
void func_vla(int rows, int cols, int array[rows][cols])
{
int i, j;
for (i=0; i<rows; i++)
{
for (j=0; j<cols; j++)
{
array[i][j] = i*j;
}
}
}
int main()
{
int x[ROWS][COLS];
func(x);
func_vla(x, rows, cols);
}
2) Utilisez un des tableaux (allouée dynamiquement) tableau de pointeurs vers (alloués dynamiquement). Ceci est principalement utilisé lorsque les limites du tableau ne sont pas connues avant l'exécution.
void func(int** array, int rows, int cols)
{
int i, j;
for (i=0; i<rows; i++)
{
for (j=0; j<cols; j++)
{
array[i][j] = i*j;
}
}
}
int main()
{
int rows, cols, i;
int **x;
/* obtain values for rows & cols */
/* allocate the array */
x = malloc(rows * sizeof *x);
for (i=0; i<rows; i++)
{
x[i] = malloc(cols * sizeof *x[i]);
}
/* use the array */
func(x, rows, cols);
/* deallocate the array */
for (i=0; i<rows; i++)
{
free(x[i]);
}
free(x);
}
3) Utiliser un tableau à une dimension et corriger les indices. Ceci peut être utilisé à la fois allouée statiquement (taille fixe) et les tableaux alloués dynamiquement:
void func(int* array, int rows, int cols)
{
int i, j;
for (i=0; i<rows; i++)
{
for (j=0; j<cols; j++)
{
array[i*cols+j]=i*j;
}
}
}
int main()
{
int rows, cols;
int *x;
/* obtain values for rows & cols */
/* allocate the array */
x = malloc(rows * cols * sizeof *x);
/* use the array */
func(x, rows, cols);
/* deallocate the array */
free(x);
}
Dans la première manière mentionnée ci-dessus, le code ne compilera pas. "rows" et "cols" dans les lignes 17 et 35 doivent changer pour "ROWS" et "COLS", respectivement. – KZcoding
'void func_vla (int array [lignes] [cols], int lignes, int cols)' devrait être 'void func_vla (int lignes, int cols, int tableau [lignes] [cols])' –