Tableau [Résolu]

Signaler
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007

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 ?
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Des calcules,la j'ai simplifié.
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007

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
}
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Oui mais la fonction est dans une boucle ,ca va etre un peu lent .
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007

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 ^_^
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
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.
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007

Faudra faire avec
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
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?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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