[SDF]Poire a écrit a écrit :
ex :
void changetab(int tab[][]) {
tab[0][1] = 2;
}
void main()
{
int tab[][];
//allocation
....
changetab(tab);
}
aprés appel tab[0][1] = 2
|
fonction main toujours retourner int
plus grave, c'est quoi cette déclaration ? "int tab[][];" ça ne fonctionne pas ce genre de truc
dans tes déclarations de variables:
tu peux mettre "int tab[]" à condition que tu fasses immédiatement une initialisation
int main()
{
int tab[] = {10, 11, 12, 13};
...
mais à moins que le C "iso 90" soit radicalement différent du ANSI C, je crois bien que ta déclaration ne fonctionne pas...
dans tes définitions de paramètres :
"int tab[]" équivalent à "int *tab" à condition que t'initialise tout de suite derrière
mais
"int tab[][]" équivalent à "je veux une syntax error"
la règle, pour les définitions des paramètres, tu peux ommettre la première dimension, mais les autres sont nécessaires pour calculer les adresses...
Pour le pb de magot, j'adhère tout à fait à ce qu'a dit MrTonio, mais j'utiliserai un simple char*
int main()
{
char *tab;
/* je veux un tableau x * y */
if ( (tab = (char *)malloc(x*y)) == NULL )
{
perror("Pb init tab" );
return(1);
}
...
/* je veux accèder à l'élément ligne i, colonne j */
tab[i*y+j] = machin_truc;
...
}
Et hop, no problemo
Mogi.