Cas des tableaux à deux dimensions
Soit :
#define MAX_L 2
#define MAX_C 3
int t[MAX_L][MAX_C];
int i,j;
Si vous voulez utiliser les notations simples t[i][j] dans la fonction il faut indiquer au compilateur au minimum le nombre maximum de colonnes pour qu'il puisse générer les calculs d'adresses « ad hoc » (décalages de lignes).
A cet effet, nous vous rappelons que tab[i][j] est transformé.
Le compilateur calcule l'expression mathématique suivante pour avoir l'adresse :
t + ( i x MAX_C + j) x Taille avec Taille = sizeof(int)
Le nombre de colonnes MAX_C est donc absolument nécessaire pour que la fonction puisse se compiler.
Ci-dessous, des exemple d'en-tête de fonctions avec passage d'un tableau 2D en paramètre :
void aff(double b[MAX_L][ MAX_C])
void aff(double b[][ MAX_C])
Les deux notations sont équivalentes et suffisantes. Ensuite nous avons le bloc suivant :
{
int i,j;
for (i=0;i< MAX_L;i++)
for (j=0;j<MAX_C;j++)
{
printf("\n tableau[%d][%d] = %4.3f",i,j,b[i][j]);
}
}
Ci-dessous, des exemple de l'appel de la fonction précédente avec les déclarations suivantes :
#define MAX_L 2
#define MAX_C 3
double td[MAX_L][MAX_C] = {{37.2,37.5, 20.8},{38.4, 40.5, 43.2}};
L'appel de la fonction est :
aff(td);