Tableau à deux dimensions
Bonjour
J'aurais une autre question à propos des tableaux à deux dimensions.
j'ai crée un tableau comme précédemment :
Code:
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:
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:
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:
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.