|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : avril 2009 Messages : 12 ![]() |
Bonjour,
Je souhaite faire passer un tableau a 2 dimensions en parametre d'une fonction. Je ne comprend pas pourquoi le code ci dessous ne marche pas, d'après les forums que j'ai lus ca devrait marcher. (Je ne dois utiliser l'allocation dynamque) Code :
Merci |
||
|
|
00
|
|
|
#2 | ||
|
Invité régulier
![]() Ingénieur développement logiciels Inscription : novembre 2006 Messages : 8 ![]() |
Tu peux essayer cela, meme si ce n'est pas super beau....
Code :
|
||
|
|
00
|
|
|
#3 | |||||
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 593 ![]() |
Citation:
La fonction display attend un pointeur de pointeur. D'une part tu déclares ce que tu vas lui passer comme un tableau prédfini, et surtout tu lui passes un type ne correspondant pas à ce qu'elle attend.. Code C :
La solution simple et logique est : Code C :
Par contre, d'une part il serait préférable d'utiliser de l'allocation dynamique, d'autre part il serait très nettement conseillé de passer les dimensions comme arguments et non en tant que variables globales... Enfin c'est au minimum int main (void)..
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|||||
|
|
00
|
|
|
#4 | |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 437 ![]() |
@souviron34 :
Citation:
l'argument attendu est l'adresse d'un pointeur sur int ou un tableau de pointeurs sur int ce que n'est pas grid dans int grid[width][height] qui lui est un tableau de tableaux de int. Le type du paramètre, si on veut passer grid en argument, doit être "adresse d'un tableau de height int" soit int (*)[height]. On doit donc déclarer Code :
void display_grid(int (*grid)[height]); Code :
void display_grid(int grid[][height]);
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 593 ![]() |
grid n'est pas équivalent à &(grid[0][0]) ??
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
00
|
|
|
#6 |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 437 ![]() |
Non, le type n'est pas le même.
grid , dans le contexte considéré, est équivalent à &grid[0] (et de type int (*)[height]) C'est grid[0] qui serait équivalent à &grid[0][0] (et de type int *) Pour la fonction : Si le type de paramètre est int **grid, alors entre grid[0] et grid[1] il y a sizeof(int*) bytes ce qui ne correspond pas à la structure du tableau passé en argument. Si le type de paramètre est int (*grid)[height], entre grid[0] et grid[1] il y a bien height*sizeof(int) bytes.
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 593 ![]() |
ok alors autant pour moi...
Comme je ne manipule de toutes façons jamais des tableaux pré-alloués, surtout à plusieurs dimensions, et que surtout je ne définis jamais de fonctions ayant pour paramètre de tels tableaux, je n'ai jamais rencontré le problème... Je me coucherai moins bête ce soir
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com