Tableau 2 dimensions en fonction

acidjack

Membre confirmé
10 Août 2007
68
1
Bonjour, je programme en C sous XCode et j'aimerai passer un tableau à 2 dimensions (sans pointeur) dans une fonction. lorsque je le fais Xcode me renvoie "error:array type has incomplete element type". Je ne sais pas d'où vient mon erreur.

Merci d'avance, voila un extrait du code:
Bloc de code:
void tabu(int tab[][]);

main()
{
     int tab[4][2];
     ...
     //j'appelle la fonction
     tabu(&tab[0][0]);
     ...
}

void tabu(int tab[][]) // il me met l'erreur ici
{
     ...
}
 
Il faut spécifier la taille du 1er index:

Bloc de code:
void tabu(int tab[][2]);

main()
{
     int tab[4][2];
     ...
     //j'appelle la fonction
     tabu(tab);
     ...
}

void tabu(int tab[][2])
{
     ...
}
 
Bonjour, je programme en C sous XCode et j'aimerai passer un tableau à 2 dimensions (sans pointeur) dans une fonction.
D'un autre côté, le pointeur est quand même plus adapté à ce genre de manipulation. Y a-t-il quelque chose d'incontournable qui t'empêche d'utiliser un pointeur ? :confused:
 
tableau ou pointeur c'est la même chose:

int(p*)[2]=tab;
ou
int(p*)[2]=(int (*)[2])&tab[0][0];

tabu(tab);
ou
tabu((int (*)[2])&tab[0][0]);

void tabu(int tab[][2]) {}
ou
void tabu(int (*tab)[2]) {}
 
Je vous remercie des vos réponses, et non mon cerveau me le permet mais notre prof ne nous permet pas d'utiliser les pointeurs en cours.

Merci

Ju
 
Ben c'est qu'il est stupide. Les pointeurs, c'est ce qui fait la puissance et la flexibilité du C.

De manière générale, il faut si tu veux passer un tableau 2d fini en paramètre de fonction, tu peux utiliser un entête du genre:

int maFonction(int monTableau[10][10]); <-- là la taille est en dur. Le fait de mettre des crochets vides est propre au C++ et non au C (attention donc, mais le C a sûrement dû évoluer).

si tu ne connais pas la taille de ton tableau 2d et que tu ne le modifies pas:
int maFonction(int** monTableau); <-- attention: ici ton tableau peu également être un vecteur que tu peux modifier...

si tu le modifies:
int maFonction(int*** monTableau); <-- attention: ton tableau peut être un tableau à 3 dimensions que tu ne modifies pas...

et ainsi de suite.

Pour être propre avec les pointeurs, à partir du moment où tu modifies une structure ou un tableau, passe le par référence (ajoute une étoile dans l'entête). Sinon, très vite tu ne sauras plus si ça modifie ou non les valeurs, la preuve...

Cordialement.
 
Je vous remercie des vos réponses, et non mon cerveau me le permet mais notre prof ne nous permet pas d'utiliser les pointeurs en cours.
Pour des questions pédagogiques ou pour masquer son ignorance ? :D Parce que apprendre le passage de paramètre de type "tableau" sans utiliser les pointeurs, c'est pas vraiment du C. Donc soit vous connaissez déjà la notion de pointeur et alors ta leçon est mal faite, soit cet exercice vient trop tôt si vous n'avez pas encore aborder les pointeurs. :zen:
 
Pour des questions pédagogiques ou pour masquer son ignorance ? :D Parce que apprendre le passage de paramètre de type "tableau" sans utiliser les pointeurs, c'est pas vraiment du C. Donc soit vous connaissez déjà la notion de pointeur et alors ta leçon est mal faite, soit cet exercice vient trop tôt si vous n'avez pas encore aborder les pointeurs. :zen:

Point. :up:

Balle au centre...

Cordialement