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

 


Dernière réponse
Sujet : [ALGO] question de débutant sur les fonctions...
HappyHarry

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


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
HappyHarry

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

Harkonnen

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]

antp

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

HappyHarry

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 !

Roco à 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
Roco 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]

youdontcare 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).
Harkonnen 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]

antp 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.
Roco 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:

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