passage d'un tableau en argument

passage d'un tableau en argument - C++ - Programmation

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  :sarcastic:

Reply

Marsh Posté le 15-04-2007 à 23:51:32   

Reply

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.

Reply

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 ?

Reply

Marsh Posté le 16-04-2007 à 17:34:12    

c'est pas plutot ce que tu fais dans call_methode qui merde ?

Reply

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 ...

Reply

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.
 
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 ?


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 :
  1. unsigned char tab[8][8];
  2. void foo(unsigned char * const);
  3. foo(tab);


... ce qui répond à votre question, que vous le vouliez ou non.
 
La véritable solution à votre problème passe par un enrobage.
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed