passage d'un tableau en argument - C++ - Programmation
Marsh Posté le 16-04-2007 à 09:22:10
Confusion: unsigned char ** est un pointeur sur un pointeur de unsigned char. Un tableau comme "unsigned char tab[8][8]" n'est pas un tableau de pointeurs sur des unsigned char[8], mais un tableau qui peut être abaissé à "unsigned char[8*8]".
Il n'y pas grand interet à trimbaler les dimensions d'un tableau dans le type, parce que in fine ils sont tous abaissables. Révisez vos fondamentaux C & C++, jetez un oeil à std::vector et reformulez votre problème.
Marsh Posté le 16-04-2007 à 17:19:32
C'est vrai que je peux utilsire les vectors, mais bon ça répond pas à ma question.
Clairement si je veux passer en arg a une fonction un [8][8], comment est ce que je dois le déclarer dans le prototypage de la fonction recevante ?
Marsh Posté le 16-04-2007 à 17:34:12
c'est pas plutot ce que tu fais dans call_methode qui merde ?
Marsh Posté le 16-04-2007 à 19:55:40
bah non , puisque si je change juste le **, et que j'attaque directement la variable globale ca marche nickel ...
Marsh Posté le 18-04-2007 à 11:17:57
guynemer a écrit : C'est vrai que je peux utilsire les vectors, mais bon ça répond pas à ma question. |
Visiblement vous ne voulez ni regarder comment std::vector est fichu ni réviser les règles héritées du C quant à aux pointeurs/tableaux.
Alors, au risque de me répeter, il sera de toute façon tjs légal d'écrire
Code :
|
... ce qui répond à votre question, que vous le vouliez ou non.
La véritable solution à votre problème passe par un enrobage.
Marsh Posté le 15-04-2007 à 23:51:32
J'ai deux ti soucis avec des tableaux pour les passer en arg.
1er pb :
J'ai un tableau style unsigned char tab[8][8] en global (déclaré avec extern "c" dans une projet en C++ ...)
Si j'y accède directement dans une des méthodes de ma classe , ca marche. Par contre si je veux le passer en argument comme ça :
call_methode((unsigned char **)tab)
void classe::call_methode(unsigned char ** tab)
{
... // ici ca plante des que j'essaie d'utiliser tab, et je vois pas pk ...
}
J'ai essayé de faire un truc genre
void classe::call_methode(unsigned char ** tab)
{
unsigned char *tmp[8][8]
*tmp = tab;
....
}
Mais pareil ça marche pas
Vous vous demandez peut etre pk je m'emmerde si la var est en globale ... mais c 'est jsut pr un test, apres la variable viendra a changer et ne sera pas en global.
Là j'ai mis global juste pr tester rapidos.
2ème pb :
J'ai demandé à plusieurs personnes et personne n'a réussi a me dire comment faire pr passer en arg a une fonction un tab dont les dimensions sont définies a la compil
par exempl
int tab[8][8];
Si je peux ensuite ballader cette variable à une fonction, si je fais fonction (int **tab) ca marche pas, fonction(int tab[][]) ca marche pas non plus, en mettant les dimensions comme ça fonction(int tab[8][8]), ca marche pas non plus ...
Voilà si qqu'un peut m'aider