Bonjour

J'aurais une autre question à propos des tableaux à deux dimensions.

j'ai crée un tableau comme précédemment :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
int** tableau_p = malloc(sizeof(int*) * 2 );
int i;
for(i=0;i<2;i++)
   tableau_p[i] = malloc(sizeof(int) * 3);
 
tableau_p[0][0] = 200;
tableau_p[0][1] = 150;
tableau_p[0][2] = 100;
tableau_p[1][0] = 50;
tableau_p[1][1] = 45;
tableau_p[1][2] = 40;
J'ai deux fonctions auxquelles je veux passer ce tableau pour l'afficher :
La 1ere qui marche sans problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
void fct_3(int **tab,int l, int c){
 
   int i,j;
   for(i=0;i<l;i++){
      for(j=0;j<c;j++)
         printf("%d ",tab[i][j]);
   }
   printf("\n");
}
Que j'appelle par fct_3(tableau_p,2,3)

Jusqu'ici tout marche mais j'ai ensuite voulu passer ce tableau d'une manière différente :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
void fct(int l,int c,int (*tab)[c]){
 
   int i,j;
   for(i=0;i<l;i++){
      for(j=0;j<c;j++)
         printf("%d ",tab[i][j]);
   }
   printf("\n");
}
}
Cette fois-ci j'utilise ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
int (*p)[3] = *tableau_p; //Vu dans la FAQ
fct(2,3, p);
mais j'obtiens le code le Warning pour la ligne int (*p)[3] = *tableau_p; :
warning: initialization from incompatible pointer type.

A l'exécution j'obtiens cependant :
200 150 100 17 50 45
au lieu de
200 150 100 50 45 40.

Pouvez-vous me dire d'où viennent les erreurs (le Warning et le mauvais affichage) ?
La 1ere manière de passer un tel tableau est-elle la seule solution valable?

Cordialement.