Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1290 connectés 

  FORUM HardWare.fr
  Programmation

  [ALGO] question de débutant sur les fonctions...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ALGO] question de débutant sur les fonctions...

n°126345
Roco
Posté le 15-04-2002 à 21:47:41  profilanswer
 

Hi :hello:  
 
Vous allez vraiment me prendre pour une tâche (hein quoi c'est déjà le cas :??: ) mais bon tant pis :
 
Je ne comprends pas très bien la différence entre la passage par référence et le passage par valeur dans la transmission de paramètres à une fonction.
 
En fait je crois que je l'utilise instictivement sans vraiment bien comprendre... et puis je crois qu'en Java, le passage se fait essentiellement par valeur (sauf dans le cas d'un objet où le passage se fait alors par référence).
 
 :hello:

mood
Publicité
Posté le 15-04-2002 à 21:47:41  profilanswer
 

n°126348
antp
Super Administrateur
Champion des excuses bidons
Posté le 15-04-2002 à 21:55:15  profilanswer
 

Passage par valeur : on fais une copie de la valeur de la variable ailleurs en mémoire, pour ne pas "abîmer" sa valeur d'origine.
Passage par référence/adresse : au lieu de passer sa valeur on passe l'adresse où trouver la valeur dans la mémoire, et donc on peut aller la modifier.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°126353
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-04-2002 à 21:58:20  profilanswer
 

Le passage par valeur te permet de transmettre à ta fonction une copie de ta variable. Toutes les opérations que tu feras dessus ne la modifieront pas, mais modifieront seulement sa copie.
 
Le passage par référence transmet à ta fonction l'adresse mémoire de ta variable. Donc, tu pourras accéder directement au contenu de ta variable par le biais de cette adresse.
 
Exemple de passage par valeur :

void ParValeur(int var)
{
    var += 5;
}
 
void main(void)
{
    int mavar = 4;
    ParValeur(mavar);
    printf("%d\n",mavar);
}

 
A l'éxécution, tu t'apercevras que mavar vaut 4 et non 9, car on a transmis une copie de mavar à la fonction ParValeur, par conséquent, toute modif faite dans cette fonction n'est pas répercutée dans la fonction main()
 
Par référence :
 
void ParRef(int *var)
{
    *var += 5;
}
 
void main(void)
{
    int mavar = 4;
    ParRef(&mavar);
    printf("mavar = %d\n", mavar);
}

 
Ici, mavar t'affichera la valeur 9, car on a transmis l'adresse de mavar (via l'opérateur &). Donc la fonction ParRef agit directement sur le contenu de cette adresse, qui est la valeur de mavar. Donc cette valeur est directement modifiée.
 
En espérant avoir été assez clair. Je te conseille de voir un cours sur les pointeurs si tout ceci te parait obscur
 
A+

 

[jfdsdjhfuetppo]--Message édité par Harkonnen--[/jfdsdjhfuetppo]

n°126359
youdontcar​e
Posté le 15-04-2002 à 22:04:05  profilanswer
 

et du coup, le passage par ref est plus rapide que par valeur dès qu'on utilise des variables plus grandes que la taille d'un pointeur (ie des structures, des classes, etc).

n°126364
Roco
Posté le 15-04-2002 à 22:19:21  profilanswer
 

oups... :sweat:  
 
merci bcp pour ton exemple harkonnen mais il est en C :(  et moi je travaille en Java donc le coup du pointeur ça me dit pas grand chose (ki à dit que java était bien pour commencer la prog :??: )
 
Je comprends à peu près les explications mais si qq pouvait me filer un exemple en java ce serait sympaaa :jap:
 
Enfin là avec vos posts je crois que j'ai saisi quand même :)

 

[jfdsdjhfuetppo]--Message édité par Roco--[/jfdsdjhfuetppo]

n°126371
Roco
Posté le 15-04-2002 à 22:25:04  profilanswer
 

à je viens de comprendre le truc avec l'exemple d'harkonnen et un exemple de mon bouquin :
 
import java.io.*;
import java.lang.Integer;
 
class MinMax {
 
 public static void main(String []args) {
  int a, b;
  Entier mon_min, mon_max;
  System.out.print("a = " );
  a = lire();
  System.out.print("b = " );
  b = lire();
  mon_min = new Entier();
  mon_max = new Entier();
  System.out.println(" a = "+a+" b = "+b+" mon_min = "+mon_min+" mon_max "+mon_max);
  MinMax(a, b, mon_min, mon_max);
  System.out.println(" a = "+a+" b = "+b+" mon_min = "+mon_min+" mon_max "+mon_max);
  System.out.println();
  mon_min.adresse();
  System.out.println();
 }
 
 public static void MinMax(int nb1, int nb2, Entier min, Entier max) {
  if (nb1 < nb2) {
   min.egale(nb1);
   max.egale(nb2);
  }
  else {
   min.egale(nb2);
   max.egale(nb1);
  }
  nb1 = 0;
  nb2 = 0;
 }
 
 static private int lire() {
  String chaine = new String();
  System.out.print("Entrez une valeur : " );
  chaine = lireClavier();
  System.out.println();
  return (new Integer(chaine).intValue());
 }
 
  static private String lireClavier() {
  byte[] lu = new byte[50];
  try {
   System.in.read (lu,0,50);
  }
  catch (IOException e) {
   System.out.print("Erreur dans la saisie" );
  }
  String s = new String(lu,0,50);
  return s.trim();
 }
   
}
 
Donc ici a et b sont passé par valeur et mon_min et mon_max par référence d'ou mon_min et mon_max change de valeur à la fin du prog et a et b ne change pas de valeurs...
 
en fait en java le passage par référence ne se fait bien qu'avec des objets

n°126380
HappyHarry
Posté le 15-04-2002 à 22:30:54  profilanswer
 

Roco a écrit a écrit :

en fait en java le passage par référence ne se fait bien qu'avec des objets  




 
ne l'oublie jamais !

n°126382
antp
Super Administrateur
Champion des excuses bidons
Posté le 15-04-2002 à 22:31:48  profilanswer
 

youdontcare a écrit a écrit :

et du coup, le passage par ref est plus rapide que par valeur dès qu'on utilise des variables plus grandes que la taille d'un pointeur (ie des structures, des classes, etc).  




 
En Pascal le "const" fait un passage par référence mais interdit de modifier la variable. Est-ce qu'en C c'est pareil ? Je ne me souviens plus :/
 
const / var / out : passage par référence
par défaut : passage par valeur


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°126383
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-04-2002 à 22:32:08  profilanswer
 

Citation :

ki à dit que java était bien pour commencer la prog


 
c clair.... en espérant que ça serve de leçon à ceux qui conseillent le Java comme premier langage... on a beau penser ce qu'on veut des pointeurs, c quand même le B-A BA...
 

Citation :

en fait en java le passage par référence ne se fait bien qu'avec des objets


 
oui, et avec des tableaux aussi
 
A noter : le C# permet de passer des paramètres de tout type par référence, grace au mot clé ref
 
Comme quoi C# n'est pas une simple repompe de Java...
 
A+

 

[jfdsdjhfuetppo]--Message édité par Harkonnen--[/jfdsdjhfuetppo]

n°126388
HappyHarry
Posté le 15-04-2002 à 22:34:47  profilanswer
 

antp a écrit a écrit :

 
 
En Pascal le "const" fait un passage par référence mais interdit de modifier la variable. Est-ce qu'en C c'est pareil ? Je ne me souviens plus :/
 
const / var / out : passage par référence
par défaut : passage par valeur  




 
vi c pareil en C pour const


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [ALGO] question de débutant sur les fonctions...

 

Sujets relatifs
[ JAVA ] Compilation - Question bete :D[C] Fonctions avec n arguments
[algo] trouver l'algo pour générer des clés CRC ??question sur une librairie C++
[C] Petite question de newb pour un bouton ...Question PHP debutant
Debutant : SQL : EXISTS et NOT EXISTS qqun peut m'expliké ?!![php] question tte conne sur les float
newbie en prog pour question a la con 
Plus de sujets relatifs à : [ALGO] question de débutant sur les fonctions...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR