Langage C : passage d'un tableau à une fonction

Langage C : passage d'un tableau à une fonction - C - Programmation

Marsh Posté le 28-04-2010 à 14:54:13    

Bonjour tout le monde !  
 
petit soucis! Je déclare un tableau de la manière suivante :  

Code :
  1. int image[10][10] ;


 
j'ai une fonction banale qui prend un tableau en argument :  

Code :
  1. void fonction_banale(int **tableau);


 
Lorsque je l'applique dans main :  
 

Code :
  1. fonction_banale(image)


 
J'ai le warning suivant : passing arg1 of 'fonction_banale ' from incompatible pointer type.
Comment cela se fait-il?  
 
Merci d'avance

Reply

Marsh Posté le 28-04-2010 à 14:54:13   

Reply

Marsh Posté le 28-04-2010 à 15:00:14    

int image[10][10] n'est pas une déclaration pour un vrai tableau à deux dimensions, mais pour un tableau à une seule dimension contenant 10 x 10 entiers.
 
int **tableau est une déclaration pour un pointeur sur un tableau de pointeurs sur des entiers.
 
Donc, c'est différent.
 
Le remède le plus simple est de déclarer sa fonction par :

void fonction_banale(int tableau[10][10]);


 
Il existe d'autres solutions, mais qui sont plus compliquées.


Message édité par olivthill le 28-04-2010 à 15:02:34
Reply

Marsh Posté le 28-04-2010 à 22:49:16    

oki ca marche comme ca! cependant on a fixé ici la taille... si je ne suis pas censée savoir quelles seront ses dimensions je fais comment? je fais des variables globales Hauteur et Longueur?

Reply

Marsh Posté le 28-04-2010 à 23:06:51    


J'ai trouvé en fait, je mets quand même mon bout de code ca peut servir:

Code :
  1. int ** allocate_image(int hauteur, int longueur){
  2. int i, j;
  3. int ** image= malloc(hauteur*sizeof(int *));
  4. for(i=0;i<hauteur;++i){
  5.  image[i]=malloc(longueur*sizeof(int));
  6.  for(j=0;j<longueur;++j){
  7.   image[i][j]=0;
  8.  }
  9. }
  10. return image;
  11. }
  12. void free_image(int hauteur, int **image){
  13. int i;
  14. for(i=0;i<hauteur;++i){
  15.  free(image[i]);
  16. }
  17. free(image);
  18. }
  19. void fonction_banale(int **tableau){
  20. ....
  21. }
  22. int main(void){
  23. int ** image = allocate_image(10,10);
  24. fonction_banale(image); //fonctionne très bien !
  25. free(10,image);


 
voila! peut être y a-t-il plus simple?
En tout cas merci à toi d'avoir pris le temps de me répondre
 
Bonne soirée
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed