Passage des tableaux en paramètre toujours par référence !!

[Résolu]
Signaler
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
Salut  !! je veux passer un tableau en paramètres mais par valeur et non par référence !! mais par défaut ca le met en référence !!
private void button1_Click(object sender, EventArgs e)
{
int [] ka = new ka[10];
ka[0] = 0;
FCT ( ka);
MessageBox.Show(ka[0].ToString()); // ca donne 1 !!!!!!!!!!!!!!!!!!!
}

private void FCT( int [] ka)
{
ka[0]= 1;
}

comment faire si je veux que le messagebox retourne toujours 0 ??

Merciiiiiii

YaoYao !!
1 + 1 = 10

7 réponses

Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
1
solution 1 :
privatevoid FCT(int[] ka)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>

{

     int a = ka[0];

     a = 1;

}

solution 2 :
privatevoid Tab()

{

int[] ka = newint[10];

ka[0] = 0;

FCT((int[])ka.Clone());

MessageBox.Show(ka[0].ToString()); // ca donne 1 !!!!!!!!!!!!!!!!!!!

}

 

privatevoid FCT(int[] ka)

{

ka[0] = 1;

}

solution 3:
au lieu de passer un tableau, tu passes juste une valeur

[:D] @++
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

hmm !! alors la solution 2 qui est interressante !! parce que moi j'ai un tableau dont je connais pas sa longeur alors je peux pas declarer des variables !! et non plus envoyer la seule valeur !! mais quand même vous pensez pas que c'est un bug ??

Merciii !!!

YaoYao !!
1 + 1 = 10
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Salut,

Pourquoi ca serait un bug ?
Mx
MVP C# 
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
1
En fait, pour répondre à Fildomen, j'ai remarqué que quand t'ajoutes les [] à un type valeur, il se transforme aussitôt en type référence.
Par exemple, un System.Int32 devient un System.Int32[]
Les tableaux contiennent généralement beaucoup de valeurs, c pourquoi on ne les place pas sur les stack.
Ce n'est pas un bug, ils ont juste décider, comme dans plusieurs autres languages, que les tableaux passent par référence...et c'est bien pratique comme ça dans d'autres circonstances (et la plupart :)

[:D] @++
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

MorpionMx:
Ben j'ai dit que c'est un bug seulement parcke j'ai crée une fonction en récursivité pour trouver les solutions du sudoku !! et ca n'a pas marché et je savais pas pourquoi même si mon code est correcte !!

BadrBadr:
Ben si c'est pratique dans d'autres circonstances on va mettre le Ref ou le Out dans les paramètres :) !!

Allé mercii tt les deux !! maintenant mon code marche nickel ;)!!

YaoYao !!
1 + 1 = 10
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Petite lecture interessante
http://msdn2.microsoft.com/en-us/library/s6938f28.aspx

Mx
MVP C# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
En corrigeant l'url, j'ai oublié de remettre la premiere partie de mon message.

...En fait, meme si int32 est de type Value, int32[] est un Array, de type reference.
Donc le comportement etait normal, pas un bug ;)

Mx
MVP C#