problem de tableau a 2 dim passer en argument dans une fonction

problem de tableau a 2 dim passer en argument dans une fonction - C - Programmation

Marsh Posté le 27-10-2003 à 19:21:26    

bonjour  
a tout le monde  
bon je vient posé mon petit bug perso  sur ce beau forum  
et j'espert trouvee quelqun qui poura repondre a ma question  
bon j'attack  
dabord la source :
/*debut */
 
#define MAX 100
//fonction afficher le tableau
void afficher(int T[][],int l,int L)
{
int i=0,j=0,c;
while (j<=l){
    printf("\n" );
        while (i<=L){
                c=T[j][i];
                printf("%d",c);
                i=i+1;
        }
    printf("\n" );
    j=j+1;
    }
return;
}
int main(void)
{
int T1[2][3] = {{1,2,3},{1,2,3}};
afficher(T1,3,2);
return 0;
}
/*fin*/
 
voila alors on me dit a al compilation:  
invalid use of array with unspecified bounds ligne 9
cad  la ligne ou c marquer:
c=T[j][i];
voilà  
bon bin si ya quelqun qui a une idee j'aimerai bien pouvoir compiler ce bordel pour avancer mon bouleau  
merci de m'avoir lu meme si vous n'aver pas d'idée c simpas d'essayer..
 
 
 
 
 
 
 
 
 

Reply

Marsh Posté le 27-10-2003 à 19:21:26   

Reply

Marsh Posté le 27-10-2003 à 19:53:58    

:heink: C quoi ce double topic?


---------------
Le Tyran
Reply

Marsh Posté le 27-10-2003 à 20:00:03    

notben >> y'en a marre à force de déchiffrer du code ! y'a des balises C/C++, c'est fait pour rendre le code plus lisible et c'est pas fait pour les chiens.  
 
edit: et fais un effort sur l'orthographe aussi :pfff:


Message édité par Harkonnen le 27-10-2003 à 20:14:44
Reply

Marsh Posté le 01-11-2003 à 19:32:03    

oui l'orthographe tape à l'oeil, le code aussi. Pas besoin de balises pour voir que c'est n'importe quoi.


Message édité par xWillow le 01-11-2003 à 19:33:16
Reply

Marsh Posté le 01-11-2003 à 19:40:03    

notben a écrit :

bon bin si ya quelqun qui a une idee j'aimerai bien pouvoir compiler ce bordel pour avancer mon bouleau
merci de m'avoir lu meme si vous n'aver pas d'idée c simpas d'essayer..
 
 


 
Laisse ta hache, et chauffe toi au gaz, il parait que c'est moins cher...  :D

Reply

Marsh Posté le 01-11-2003 à 20:22:32    

Tu ne peux pas utiliser des tableaux multidimension si tu ne spécifie pas sa taille.
 
Remplace "int T[][]" par "int * T" et fais ca pour y acceder : "T[i+j*taillex]"

Reply

Marsh Posté le 02-11-2003 à 10:35:17    

oula Kristoph tu fais appel aux pointeurs, je ne sais pas s'il a vu ça encore ... en tout cas quand j'en étais aux tableaux à 2 dimensions je n'avais pas vu ces bêtes là :)
 
Pour le problème des tableaux en argument, en spécifiant uniquement la première dimension dans la définition de la fonction qui appelle le tableau je crois que ça marche.

Reply

Marsh Posté le 02-11-2003 à 10:53:11    

freeman_78 a écrit :

oula Kristoph tu fais appel aux pointeurs, je ne sais pas s'il a vu ça encore ... en tout cas quand j'en étais aux tableaux à 2 dimensions je n'avais pas vu ces bêtes là :)
 
Pour le problème des tableaux en argument, en spécifiant uniquement la première dimension dans la définition de la fonction qui appelle le tableau je crois que ça marche.


 
Il n'a pas le choix ici puisqu'il doit passer les dimensions du tableau en paramètre. Ta solution l'oblige à figer toutes les dimensions du tableau sauf une.

Reply

Marsh Posté le 02-11-2003 à 14:03:58    

Ah oui s'il veut que la fonction s'adapte à la taille du tableau il faut utiliser les pointeurs en effet :)
 
Mea culpa :)

Reply

Marsh Posté le 02-11-2003 à 22:20:54    

meme avec un int **T (et oui, pas int * T)
il peut faire T[i][j]

Reply

Marsh Posté le 02-11-2003 à 22:20:54   

Reply

Marsh Posté le 02-11-2003 à 22:39:00    

méaculpa, sans pointeur, il suffit de préciser la structure du tableau;
void afficher(int T[2][3],int l,int L)

Reply

Marsh Posté le 02-11-2003 à 22:57:02    

bugsan a écrit :

méaculpa, sans pointeur, il suffit de préciser la structure du tableau;
void afficher(int T[2][3],int l,int L)


 
Et dans ce cas, quel est l'interet de passer en paramètre la largeur et la longueur du tableau si la taille de celui-ci est fixée à l'avance ?

Reply

Marsh Posté le 08-11-2003 à 12:52:08    

sinoc fait comme ca
 
void afficher(int l,int L, int T[l][L])

Reply

Marsh Posté le 08-11-2003 à 13:17:26    

darkpotpot a écrit :

sinoc fait comme ca
 
void afficher(int l,int L, int T[l][L])


 
C'est pas mal ça, je ne connaissais pas cette notation. Depuis quelle version du C on peut faire ça ?

Reply

Marsh Posté le 08-11-2003 à 18:17:29    

C'est pas un truc du genre void afficher(int T[2][],int l,int L) ? Ai vu qq chose comme ça qq part (FFT je crois, jamais utilisé)... On spécifie la première dim (lignes) pour que le compilo sache comment décaler pour trouver les colonnes.

Reply

Marsh Posté le 08-11-2003 à 19:06:55    

Kristoph a écrit :


 
C'est pas mal ça, je ne connaissais pas cette notation. Depuis quelle version du C on peut faire ça ?


sait pas depuis quelle version mais je l'utilise en ce moment car le prof veut pas qu'on se serve des pointeurs donc ca marche. le seul truc a faire c'est de declarer le nom de tes lignes et de tes colonnes avant

Reply

Marsh Posté le 08-11-2003 à 19:08:49    

y doit etre beau le code généré derriere [:joce]

Reply

Marsh Posté le 11-11-2003 à 09:56:02    

CARBON_14 a écrit :

C'est pas un truc du genre void afficher(int T[2][],int l,int L) ? Ai vu qq chose comme ça qq part (FFT je crois, jamais utilisé)... On spécifie la première dim (lignes) pour que le compilo sache comment décaler pour trouver les colonnes.
 


C'est à peu près ce que je voulais dire plus haut :)
Sauf que come tu spécifies déjà une dimension, t'as soit l soit L à transmettre en paramètre, mais pas les deux je pense ...

Reply

Sujets relatifs:

Leave a Replay

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