J’ai essayé de résoudre ce problème toute la journée:
Comment passer un tableau double à une fonction?
Voici un exemple:
int masortingx[5][2] = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} };
Et je souhaite passer cette masortingce à la fonction nommée eval_masortingx
,
void eval_masortingx(int ?) { ... }
Je ne peux pas comprendre ce qui devrait être à la place de ?
Quelqu’un peut-il m’aider avec ce problème?
Je sais qu’un tableau peut être passé comme un pointeur, mais qu’en est-il d’un tableau double (ou sortingple tableau?)
Merci, Boda Cydo.
Pour être utilisable en tant que tableau, le compilateur doit connaître la foulée interne du tableau, il faut donc:
void eval_masortingx( int m[5][2] ) { ...
ou:
void eval_masortingx( int m[][2], size_t od ) { ... /* od is the outer dimension */
ou juste:
void eval_masortingx( int* p, size_t od, size_t id ) { ... /* ditto */
Dans tous les cas, c’est du sucre syntaxique – le tableau est décomposé en un pointeur.
Dans les deux premiers cas, vous pouvez référencer les éléments d’un tableau comme d’habitude m[i][j]
, mais vous devrez compenser manuellement dans le troisième cas comme p[i*id + j]
.
Vous ne devriez pas passer la masortingce entière, mais plutôt le pointeur. Cependant, vous devriez aussi passer la taille … c’est comme cela que je le ferais, en supposant qu’il s’agisse toujours de paires [2].
struct pair { int a, b; }; struct pair masortingx[] = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} }; void eval_masortingx(struct pair *masortingx, size_t masortingx_size) { ... } eval_masortingx(masortingx, sizeof(masortingx) / sizeof(struct pair);