Tableau

Résolu
cs_sam20 Messages postés 184 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 26 mai 2016 - 18 mars 2007 à 11:39
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 18 mars 2007 à 17:23
Voila j'ai une fonction dans une boucle genre comme ceci:

void Add( short a[10][10]){
a[0][0]=1;
//blah,blah
}

Je voudrais quand je fais :
short c[10][10];
//blah,blah..
Add(c);
// la Valeur de c[0][0] change.Je voudrai apres l'appel de la fonction ne pas changer c.
Merci

10 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 mars 2007 à 16:37
Si tu ne modifies pas toutes la valeurs tu tableau, tu sauvegardes celles que tu ne changes pas et tu les remets à la fin:

void Add( short a[10][10]){
  short old00 = a[0][0]:
  a[0][0]=1;
  //blah,blah
  a[0][0] = old00;
}

Si tu modifies tout le tableau, faudra effectivement faire une copie (dans ce cas, choisir plutot le memcpy)

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
18 mars 2007 à 11:55
A quoi sert ta fonction si aprés son appel ton tableau ne change pas ? En plus comme elle ne retourne rien, ca me parait complétement inutile, non ?
0
cs_sam20 Messages postés 184 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 26 mai 2016 3
18 mars 2007 à 11:56
Des calcules,la j'ai simplifié.
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
18 mars 2007 à 12:01
Ok, alors je crois pouvoir dire que dans ta fonction tu passes un pointeur, tu ne crées pas de copie de ton tableau. Il te suffirait alors dans de recréer le tableau :

void Add(short a[10][10])
{
    short b[10][10];
    for(int i=0; i<10; i++)
        for(int j=0; j<10; j++)
           b[i][j] = a[i][j];

    //ensuite tu travailles avec le tableau b
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_sam20 Messages postés 184 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 26 mai 2016 3
18 mars 2007 à 12:03
Oui mais la fonction est dans une boucle ,ca va etre un peu lent .
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
18 mars 2007 à 12:06
Peut etre mais comme tu le fais tu ne passes pas une copie de ton tableau mais l'original, donc ca va forcement le modifier. Je ne vois pas d'autres solutions, mais peut etre qu'il y'en a d'autres ^_^
0
cs_sam20 Messages postés 184 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 26 mai 2016 3
18 mars 2007 à 12:07
Par ce que j'ai essayer avec:

void Add(short a[10][10]){
 unsigned short f[8][8];
memcpy(f,a, sizeof (f));
    //blah blah
}

C'est lent.
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
18 mars 2007 à 12:12
Faudra faire avec
0
cs_sam20 Messages postés 184 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 26 mai 2016 3
18 mars 2007 à 16:57
c'est plus rapide de creer deux variables,changer deux valeurs (a[0][0],a[0][1]) puis rendre les valeurs, ou que de faire une copie?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 mars 2007 à 17:23
Oui là c'est plus rapide (environ 50 fois plus rapide, puisque ton tableau contient 100 éléments).

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Rejoignez-nous